从Firebase读取数据时发生NullPointerException

时间:2018-11-26 22:51:21

标签: java android firebase firebase-realtime-database

我以前一直在寻找解决方案,但是在准确了解如何获取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;
    }
}

结构:

structure

一切正常,直到获得实际价值。

1 个答案:

答案 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);