gpt4 book ai didi

java - Firebase DataSnapshot,无法检索到正确的子列表

转载 作者:行者123 更新时间:2023-11-29 18:57:59 24 4
gpt4 key购买 nike

我有一个用于聊天应用程序的数据库结构,所以我在数据库中有一个消息节点,如下所示 enter image description here

messages 是一个键的父级,它包含两个聊天用户的 UID,这个键包含聊天正文的值,我的应用程序到目前为止在按我想要的方式推送数据时工作得很好。

但是 尝试读取数据时,DataSnapShot 对象始终具有节点的最后一个叶子,即键的子节点。我尝试了不同的方法来让 key 自行迭代并获得其值列表,但没有成功。

我尝试过的方法

  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

java.lang.String

And parent key prints L91eMRVq_nx6WHUzZFo

另一个

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

The output is L91eMRVq_nx6WHUzZFo

我想要实现的目标

检索消息节点内的键列表为

vXgRtbjqhUYPOLyjhmGKRzITUC83-24L0kQx75fhoz06YpXnWRheETct2

最佳答案

在 onChildAdded 方法内部不要使用 getChildren() 和 for 循环方法,因为 onChildAdded 方法会返回 mMessageDbRef 引用下方的各个节点。基本上onChildAdded中的data snapshot参数可以直接转换为Message对象。

因此,无需使用任何循环或getChildren 方法,直接将数据快照值分配给消息对象。

通过这样做,您将可以通过消息对象变量访问消息的值。

像这样:

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

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

关于java - Firebase DataSnapshot,无法检索到正确的子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49602269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com