【问题标题】:Retrieve child node value from firebase with push keys as parent使用按键作为父级从 Firebase 中检索子节点值
【发布时间】:2021-08-14 02:03:33
【问题描述】:

我在从我的 firebase 数据库中检索数据时遇到问题。数据以这种方式排列,在我的根 ref 节点中,我有一个子节点作为“FirstReply”,其中子节点作为消息 Id,对于每个 messageId,都有内部节点(按键)和值,如图所示。

我想在每个 PushID 节点中检索 child SellerID 的值,并想与当前的 userID 进行比较,但是当我编写这样的代码时

RootRef.child("FirstReply").child(Enquiry_MessageID).
    addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(@NonNull DataSnapshot snapshot) {
      String returnSellerID=  snapshot.child("sellerId").getValue().toString();
      if(returnSellerID==current_user_Id) {
         //my remaining code

      }

        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });

我收到如下错误:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String java.lang.Object.toString()”

我的应用程序崩溃了。我可以在每个实例中拥有 messageID 的值,但在每种情况下推送值都不同。有什么办法可以解决我的问题吗?

【问题讨论】:

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


    【解决方案1】:

    你必须遍历你得到的snapshot 的子节点:

    RootRef.child("FirstReply").child(Enquiry_MessageID).addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(@NonNull DataSnapshot snapshot) {
        for (DataSnapshot child: snapshot.getChildren()) { // ? loop over the child nodes
          String returnSellerID = child.child("sellerId").getValue().toString();
          if(returnSellerID.equals(current_user_Id)) { // ? use equals to compare strings
            //my remaining code
          }
        }
      }
    
      @Override
      public void onCancelled(@NonNull DatabaseError error) {
        throw error.toException(); // ? never ignore errors
      }
    });
    

    【讨论】:

    • 非常感谢
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多