问题描述
我的firebase数据库如下:
Chats
----{userId1}
------{userId2 : true}
------{userId3 : true}
----{userId2}
------{userId1 : true}
------{userId3 : true}
Users
-----{userId1}
---{...}
-----{userId2}
---{...}
-----{userId3}
---{...}
所以我要做的基本上是列出一个用户聊天,例如正在与 userId2 和 userId3 聊天的 userId1 。这是我在ViewModel中的操作方式:
public LiveData<List<Chats>> getChatList() {
DatabaseReference chatsRef = baseRef.child("Chats").child(getCurrentUser);
FirebaseLiveData chatsLivedata = new FirebaseLiveData(chatsRef);
return Transformations.map(chatsLivedata,new Function<DataSnapshot,List<Chats>>() {
@Override
public List<Chats> apply(DataSnapshot dataSnapshot) {
List<Chats> chatsList = new ArrayList<>();
if (dataSnapshot.exists()){
for (DataSnapshot snapshot: dataSnapshot.getChildren()){
usersRef.child(snapshot.getKey()).addValueForSingleEventListener(new ValueEventListener{
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Chats chat = dataSnapshot.getValue(Chats.class);
chatsList.add(chat);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
}
}
}
return chatsList;
}
});
}
但是 LiveData 始终返回0个聊天项。我了解这是由于Firebase的异步特性所致,请问,我还能如何实现它?我要做的就是使用聊天节点下的键在 Users 节点下感谢您。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)