Possible solution, but structure failure在我的应用程序中,我想从 Firebase 实时数据库检索一个列表,但当我在数据库中添加一些内容时,应用程序上的列表没有实现,它崩溃了。 ValueListener 有什么问题吗?
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds: dataSnapshot.getChildren()){
comment = ds.getValue(Comment.class);
list.add(comment.getCommentText().toString()+" -"+comment.getUser().toString());
}
listView.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference at world.cryneo.partytime.java.EventProfileActivity$1.onDataChange(EventProfileActivity.java:71)
应用程序崩溃并重新启动后,会显示数据库中的新评论。但首先它崩溃了。
这就是正在上传的内容。上传后应用程序崩溃,但重新启动应用程序后内容正常显示。那么为什么会崩溃呢?
public void uploadComment(){
String nextIndex = Long.toString(eventCommentsCounter+1);
newComment = input_event_comment.getEditText().getText().toString();
mDatabase = FirebaseDatabase.getInstance().getReference().child("Events").child(event_name).child("comments").child(nextIndex).child("user");
mDatabase.setValue(userName);
mDatabase = FirebaseDatabase.getInstance().getReference().child("Events").child(event_name).child("comments").child(nextIndex).child("commentText");
mDatabase.setValue(newComment);
finish();
Intent eventIntent = new Intent(WriteCommentActivity.this, EventProfileActivity.class);
eventIntent.putExtra("Event_Name", event_name);
startActivity(eventIntent);
finish();
}
最佳答案
似乎您一次向数据库添加一个值,因此当您添加“user”等值之一时,您的监听器会激活并构建一个不完整的 Comment
对象,该对象没有评论文本。
尝试先构建 POJO 并一次性上传所有Comment
数据,而不是按字段上传。
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference index = database.getReference("Events").child(event_name).child("comments").child(nextIndex);
index.push().setValue(new Comment(user, commentText));
关于java - 在 Firebase 数据库中添加新子项时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51657397/