使用LiveData和Firebase数据库

问题描述

我的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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...