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:尝试调用虚拟方法 空对象上的'java.lang.String java.lang.String.toString()' 参考 在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();
}
答案 0 :(得分:0)
似乎您一次要向数据库中添加一个值,因此,当您添加诸如“ user”之类的值之一时,侦听器将激活并构建一个不带有commentText的不完整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));