我以前一直在寻找解决方案,但是在准确了解如何获取NullPointerException时遇到了问题。我的目标是为textView
设置一条消息,但是该应用发生崩溃。这是错误:
java.lang.NullPointerException:尝试调用虚拟方法 'java.lang.String com.okimin.flashchatnewfirebase.Post.getMessage()' 在空对象引用上
变量:
private FirebaseUser user;
private FirebaseAuth mAuth;
private DatabaseReference mDatabaseReference;
初始化它们:
mAuth = FirebaseAuth.getInstance();
mDatabaseReference = FirebaseDatabase.getInstance().getReference();
user = FirebaseAuth.getInstance().getCurrentUser();
发生问题的地方:
final String iD= user.getUid();
mDatabaseReference.child("messages").child(iD).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Post postIt = new Post();
postIt.setMessage(dataSnapshot.getValue(Post.class).getMessage()); // Where the problem happens
mtextview.setText(postIt.getMessage());
}
}
张贴课程:
public class Post {
private String message;
private String author;
public Post(){
}
public Post(String message, String author) {
this.message = message;
this.author = author;
}
public String getMessage() {
return message;
}
public String getAuthor() {
return author;
}
public void setMessage(String message) {
this.message = message;
}
public void setAuthor(String author) {
this.author = author;
}
}
结构:
一切正常,直到获得实际价值。
答案 0 :(得分:1)
我认为与@DougStevenson一样,您的iD
与Firebase数据库中的不匹配。
在将valueEventListener
添加到日志之前,尝试使用以下几行将其记录在日志中。
Log.i("seeThis",iD);
您可以使用Firebase uid
在数据库中设置Post
类,然后检索也不会出现问题。
我的意思是,您应该使用以下代码在Firebase中设置数据:
DatabaseReference ref = FirebaseDatabse.getInstance().getReference().child("messages");
ref.child(user.getUid()).setValue(Post.class);