【问题标题】:datasnapshot doesn't get value from firebasedatasnapshot 没有从 firebase 获得价值
【发布时间】:2021-10-31 09:57:37
【问题描述】:

我想问题一定存在,但我想不通。我想到达标题,但我不能总是快照返回 null 也没有关于连接的问题,因为当我检查用户 ID 时,我可以到达。

  DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference titleRef = rootRef.child("users").child("value").child("title");
    button.setOnClickListener(new View.OnClickListener() {
        @Override

        public void onClick(View view) {
            titleRef.get().addOnCompleteListener(task -> {
                if (task.isSuccessful()) {
                    DataSnapshot snapshot = task.getResult();
                    String title = snapshot.getValue(String.class);
                    Log.d("TAG", title);
                    System.out.println(title);
                } else {
                    Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors!
                }
            });
        }
    });

----我的数据结构----

{
  "users" : {
    "value" : {
      "title" : "dsfdfasd"
    }
  }
}

【问题讨论】:

  • 代码乍一看还不错。您是否已经在调试器中运行了代码?如果是这样,并且您在onDataChange 内的第一行放置了一个断点,它会到达该行吗?如果是这样,并且您登录 snapshot.getValue(),它会输出什么?
  • 我用安卓模拟器

标签: java android firebase firebase-realtime-database


【解决方案1】:

如果您的数据库架构如下所示:

{
  "users" : {
    "value" : {
      "title" : "dsfdfasd"
    }
  }
}

为了能够得到“title”的值,请使用下面的参考

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference titleRef = rootRef.child("users").child("value").child("title");

调用 get() 并像这样附加一个监听器:

titleRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DataSnapshot> task) {
        if (task.isSuccessful()) {
            DataSnapshot snapshot = task.getResult();
            String title = snapshot.getValue(String.class);
            Log.d("TAG", title);
        } else {
            Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors!
        }
    }
});

logcat 中的结果将是:

dsfdfasd

除此之外,始终记录错误,而不是盲目地假设一切正常。

【讨论】:

  • 当我尝试这个时,我得到“进程:com.example.myapplication,PID:17444 java.lang.NullPointerException:println 需要一条消息”这个错误在“Log.d(“TAG”,标题);”这里
  • 是的,没错。对不起这是我的错。缺少对 .child("users") 的呼叫。请参阅我更新的答案。现在可以用了吗?
  • 不幸的是没有。还是一样的问题。
  • 不,应该可以。请编辑您的问题并向我们展示更改后的代码,并添加您数据库的屏幕截图。
  • 你的数据库在什么位置?
【解决方案2】:

您的数据结构与您的代码不兼容

ref.child(userID)....

您的数据结构中没有 uid。相反,你有价值。

【讨论】:

    猜你喜欢
    • 2021-06-21
    • 2018-11-30
    • 2016-10-20
    • 2018-04-08
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    相关资源
    最近更新 更多