如何在Java中轻松获取聊天应用程序的嵌套Firebase实时数据库数据?

时间:2018-10-17 20:51:36

标签: java firebase firebase-realtime-database chat

我正在编写一个聊天应用程序,我需要在其中检查两个用户u1u2是否有以前的对话。如果有,则检索conversationId并将消息发送到该端点。否则,创建一个新对话。

我的数据结构看起来像这样。

userconversations:
    userId1:
        conversationID1:
            participants:
                user1: true
                user2: true
         conversationID2:
             participants:
                user1: true
                user7: true

在我的应用中,我想从userconversations/userId1中读取所有数据,并遍历列表以确定user2是否在对话中。

我的问题是如何设计班级,以便快速反序​​列化此数据并避免使用getChildren()调用对其进行迭代?

如果我规范化数据并保留不同的conversationId -> participants映射,那么对于每个会话ID,我将不得不查询该流以获取数据。如果一个用户可以进行100次对话,那么这将非常缓慢且耗费资源。

请随时提出解决我的目的的替代方案设计。

1 个答案:

答案 0 :(得分:1)

由于键user1user2user7是动态的,因此无法将它们自动序列化为POJO的属性。最好的办法是使用GenericTypeIndicator或强制类型转换Map<String, boolean>participants获得(Map<String, boolean>)snapshot.child("participants").getValue()