[英]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.