簡體   English   中英

Firebase DataSnapshot,無法檢索正確的子項列表

[英]Firebase DataSnapshot, Can't retrieve the right list of children

我有一個用於聊天應用程序的數據庫結構,所以我在數據庫中有一個消息節點,如下所示在此處輸入圖片說明

消息是一個鍵的父鍵,它包含兩個聊天用戶的 UID,這個鍵包含聊天正文的值,到目前為止,我的應用程序在按我想要的方式推送數據時工作得很好。

但是當試圖讀取數據時,DataSnapShot 對象總是具有節點的最后一片葉子,即鍵的子節點。 我嘗試了不同的方法來獲取它自己迭代的密鑰,並在沒有運氣的情況下獲得它的值列表。

我試過的方法

  public static final String MESSAGES_NODE_DB = "messages"; 
  mMessageDbRef = FirebaseDatabase.getInstance().getReference()
                    .child(MESSAGES_NODE_DB).child(keyUserA + "-" + KeyUserB);
    
     mMessageDbRef.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    Timber.d("parent key " + dataSnapshot.getKey());
    
                    for (DataSnapshot singleSnap : dataSnapshot.getChildren()) {
                            Message message = singleSnap.getValue(Message.class);
                            messageList.add(message);
                            instantiateRecyclerView();
                    }
                }

這種方法總是會導致錯誤 Can't convert object of type

字符串

並且父密鑰打印 L91eMRVq_nx6WHUzZFo

另一個

    mMessageDbRef = FirebaseDatabase.getInstance().getReference().child("messages");
for (DataSnapshot singleSnap : dataSnapshot.getChildren()) {
                Timber.d("keys" + singleSnap.getKey());
            }
        }

輸出為 L91eMRVq_nx6WHUzZFo

我想要達到的目標

檢索消息節點內的鍵列表為

vXgRtbjqhUYPOLyjhmGKRzITUC83-24L0kQx75fhoz06YpXnWRheETct2

在 onChildAdded 方法內部不使用 getChildren() 和 for 循環方法,因為 onChildAdded 方法返回 mMessageDbRef 引用下方的各個節點。 基本上 onChildAdded 中的數據快照參數可以直接轉換為 Message 對象。

因此,直接將數據快照值分配給消息對象,就像您所做的那樣,無需使用任何循環或 getChildren 方法。

通過這樣做,您將可以通過消息對象變量訪問消息的值。

像這樣的東西:

@Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                        Message message = dataSnapshot.getValue(Message.class);
                        messageList.add(message);
                        instantiateRecyclerView();
                }
            }

要檢索messages節點內的密鑰:

DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("messages").child(keyUserA + "-" + KeyUserB);

reference.addListenerForSingleValueEvent(new ValueEventListener() {
 @Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
   String keys=datas.getKey();
    }
 }
 @Override
public void onCancelled(DatabaseError databaseError) {
   }
 });

數據快照位於child(keyUserA + "-" + KeyUserB); 然后您在 randomid L91eMRVq_nx6WHUzZFo迭代,您將能夠使用getKey()檢索它

暫無
暫無

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

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