【发布时间】:2017-12-10 20:11:04
【问题描述】:
运行 updateList() 时,它会从 Firebase 加载已输入的数据。这是一个聊天应用程序,因此当有人键入消息时,Firebase 会实时更新,这也很有效。
问题是我得到一个 NullPointerException(不应该是这种情况),我在其中创建了一个新的 Message 对象(Message mess = new Mess....)。为什么我会收到此错误,为什么我尝试的所有方法都不起作用?
Error = java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String java.lang.Object.toString()”。
我尝试了一个锁,一个布尔值,并尝试使变量成为全局变量。
public void sendButtonClicked(View view) {
final String messageValue = userMessage.getText().toString().trim();
final String date = "4:20";
final String userName = "Rob";
if (!TextUtils.isEmpty(messageValue)) {
final DatabaseReference newPost = reference.push();
newPost.child("Content").setValue(messageValue);
newPost.child("Date").setValue(date);
newPost.child("userName").setValue(userName);
}
}
private void updateList() {
reference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Message mess = new Message(dataSnapshot.child("Content").getValue().toString(), dataSnapshot.child("Date").getValue().toString(),dataSnapshot.child("userName").getValue().toString());
result.add(mess);
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
Message message = dataSnapshot.getValue(Message.class);
int index = getItemIndex(message);
result.set(index, message);
adapter.notifyItemChanged(index);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
Message message = dataSnapshot.getValue(Message.class);
int index = getItemIndex(message);
result.remove(index);
adapter.notifyItemRemoved(index);
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
数据在 Firebase 中的外观快照
【问题讨论】:
-
根据 Logcat 的说法,问题出在您致电
toString()时。很简单,dataSnapshot.child("Content").getValue()中的值是NULL,验证它是否返回您希望返回的内容。 -
我明白,但为什么呢?如果值为 NULL,为什么还要更新 Firebase?问题是否可能是 onChildAdded 方法在三个值被推送之前运行?
-
如何初始化
reference?我在你的代码中看不到它。 -
FirebaseDatabase 数据库 = FirebaseDatabase.getInstance(); DatabaseReference 参考 = database.getReference("Messages");
标签: android firebase firebase-realtime-database nullpointerexception