【问题标题】:SingleValueEvent Showing nullSingleValueEvent 显示为空
【发布时间】:2019-05-16 08:11:35
【问题描述】:
Query sqlite = mDatabaseReference.child("Messages").child(MessageSenderId).child(MessageRecieverId);
sqlite.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

                if (dataSnapshot.hasChild("Message")) {
                    String msg = dataSnapshot.child("Message").getValue().toString();
                    String from = dataSnapshot.child("From").getValue().toString();
                    String time = dataSnapshot.child("Time").getValue().toString();

                } else {
                    Toast.makeText(getApplicationContext(), "NULLLL", Toast.LENGTH_SHORT).show();
                }

数据库

这是数据库中最基本的东西。我从来没有遇到过childEvent 或valueEvent 的问题,我现在想要一个事件,但我无法获取。

没有错误,因为我放了一个 if 语句,它显示 toast 为 null,这意味着 dataSnapshot 没有名为 messages 的子项,但它就在那里。我也试过放一个for循环,但没用

【问题讨论】:

  • 您缺少将child(UID) 添加为从您的数据库中查找,请尝试一次。
  • 但这就是推送 ID @JeelVankhede
  • 根据您的数据库查询,没有为您的 UID 添加子项,因此数据库将直接引用 UID 子项,这就是您的 Message 为空的原因。
  • 但我不知道 UID 对吧?那我怎么才能拿到它。通常数据库只是通过它,但为什么现在没有发生@JeelVankhede
  • 如果您尝试硬编码这些 ID(MessageSenderId 和 MessageRecieverId),您会得到预期的结果吗?

标签: java android database firebase firebase-realtime-database


【解决方案1】:

你没有给出完整的参考。有一个按键列表,您必须使用 foreach 循环。

Query sqlite = mDatabaseReference.child("Messages").child(MessageSenderId).child(MessageRecieverId);
sqlite.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

for (DataSnapshot vinSnapshot : dataSnapshot.getChildren()) {
                    if (vinSnapshot .hasChild("Message")) {
                    String msg = dataSnapshot.child("Message").getValue().toString();
                    String from = dataSnapshot.child("From").getValue().toString();
                    String time = dataSnapshot.child("Time").getValue().toString();

                } else {
                    Toast.makeText(getApplicationContext(), "NULLLL", Toast.LENGTH_SHORT).show();
                }
                }

或者您可以将所有数据存储到 ArrayList 中,然后执行您的任务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 2013-10-03
    相关资源
    最近更新 更多