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