【问题标题】:NullPointerException when reading data from Firebase [duplicate]从 Firebase 读取数据时出现 NullPointerException [重复]
【发布时间】:2018-11-26 22:51:21
【问题描述】:

我之前已经搜索过此问题的解决方案,但我无法准确理解我是如何获得 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;
    }
}

结构:

在我得到实际值之前一切正常。

【问题讨论】:

  • iD 是否匹配messages 下的孩子?我的猜测是它没有,因为消息下的孩子看起来像那个推送 ID,但 Firebase auth 用户 ID 不是。
  • 在搜索解决方案时,我实际上并不熟悉。您能否详细说明与推送 ID 不匹配的 FirebaseAuth id?
  • Doug 提到,显然他的消息记录例程是在推送 ID 而非用户 ID 下进行记录。检查您的写入例程以写入用户 ID 节点。
  • @DanielGaston 通过单击答案旁边的勾号查找按钮将答案标记为正确,这有助于问题的未来读者,我也会很感激。干杯! :)

标签: java android firebase firebase-realtime-database


【解决方案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);

【讨论】:

  • 这样做时我遇到的一个问题是它会创建另一个异常。 Java.lang.SecurityException:无法使 java.lang.Class 可访问
  • 现在问题解决了吗?还是您仍然遇到同样的错误?
  • 这有帮助。非常感谢你们。
猜你喜欢
  • 2017-01-24
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
相关资源
最近更新 更多