簡體   English   中英

如何訪問Firebase數據庫中嵌套在子節點內的子節點?

[英]How do I access the child nodes nested inside child node in Firebase database?

這是我在firebase中的數據庫結構。

在此處輸入圖片說明

我想訪問消息子項下的消息內容。我可以獲取消息子項的子項計數,但無法檢索每個子項的值。

ref2指向我的Firebase實例。
我必須從特定聊天室中獲取所有消息。

     ref2.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
                        listText.add(childDataSnapshot.child("messages").child("message").getValue() + "");
                        listText.add(childDataSnapshot.child("messages").child("name").getValue() + "");
                        //   userArrayList.add(new User("" + childDataSnapshot.child("username").getValue(), "" + childDataSnapshot.child("profileURL").getValue(), ""));
                        Log.v("messag_ids", "" + childDataSnapshot.child("messages").child("Kd4TQPrAWsNY1vcid1P").child("message")); //displays the key for the node

                    }
                    lvChat.setAdapter(new ChatAdapter(ChatActivity.this, listUsername, listText));
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

如果您想讓消息成為孩子,我們需要像這樣遍歷。

'Kd4TN8fuda6CArtAUo0'->'消息'->'Kd4TQPrAWsNY1vcid1P'->'消息'

嘗試這個 :

<yourref>.child('Kd4TN8fuda6CArtAUo0').child('messages').child('Kd4TQPrAWsNY1vcid1P').child('message')

在此處輸入圖片說明

請參閱FireBase團隊的此鏈接: 轉換為Firebase數據庫的常見SQL查詢-SQL開發人員的Firebase數據庫#4

您的問題在這里:

childDataSnapshot.child("messages").child("message")

您正在尋找一個節點稱為messagemessages ,它不存在。

您應該首先對messages節點進行引用,然后遍歷所有子級。

第一個方法是使用DataSnapshot的方法遍歷子級並使用以下值訪問值:

ref2.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
              for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {

                  String name = (String) childDataSnapshot.child("name").getValue();
                  //Do the same for other properties.

               }
               //......
     }
     //..
}

否則,第二種方法是使用內置的JSON-to-POJO序列化器/反序列化器。
您可以使用Message.class然后使用

ref2.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
                Message message = messageSnapshot.getValue(Message.class);
            }
        }
   //..
}

您的Message類應該類似於:

public class Message {

   String name;
   String message;
   String chatroom;

   public Message(){
     //default constructor
   }

   //Getters and setters
   //....

}

我有一個更簡單的答案:

您將嘗試像其他節點(如chatpic ,owner等)一樣訪問消息節點。//當您試圖作為子節點訪問消息時,Ur數據庫引用是父節點,請使用以下代碼:

for(DataSnapshot dataSnapshot1:mainSnapShot.child("message").getChildren()){                          

                            Map<?, ?> valuex = (Map<?, ?>) dataSnapshot1.getValue();


                            if (!TextUtils.isEmpty(valuex.get("message").toString())) {
                                Log.i("message",valuex.get("message").toString());
                            }



                            if (!TextUtils.isEmpty(valuex.get("name").toString())) {
                                Log.i("name",valuex.get("name").toString());
                            }

                        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM