我正在尝试使用firebase实时数据库实现一对一聊天,我使用 senderid , Recieverid ,消息插入消息,< EM>日期,发出者, Recievername , 在我的情况下,不同的用户是不同的聊天室,我需要在一对一聊天室显示这个聊天室我如何在我的Android应用程序中实现
这是我的反向数据代码
private void append_chat_conversation(DataSnapshot dataSnapshot) {
Iterator i = dataSnapshot.getChildren().iterator();
while (i.hasNext()){
RecieverrId = (String) ((DataSnapshot)i.next()).getValue();
datee = (String) ((DataSnapshot)i.next()).getValue();
chat_msg = (String) ((DataSnapshot)i.next()).getValue();
receiverrname = (String) ((DataSnapshot)i.next()).getValue();
senderrid = (String) ((DataSnapshot)i.next()).getValue();
chat_user_name = (String) ((DataSnapshot)i.next()).getValue();
chat_conversation.append(chat_user_name +" : "+chat_msg +" \n");
}
}
但此代码从该聊天室获取所有数据, 但我需要显示发件人姓名和收件人姓名相同的消息,sendername从app用户获取,而收件人名称是聊天室的名称,
请帮我解决这个问题
答案 0 :(得分:0)
您似乎已经以在SQL数据库中对其进行建模的方式对聊天数据进行了建模:包含行的单个表。您需要重新考虑此数据模型以更好地适应NoSQL系统。
Firebase的查询模型比平均关系DBMS更有限。这意味着您可以像以前一样依赖查询。
另一方面:Firebase数据库允许非常灵活的数据建模。这反过来意味着您通常可以调整数据模型以允许您的应用程序需要的查询。这是使用NoSQL数据库时的常见主题:您应该对数据建模以适应您的应用程序想要使用它的方式。这通常意味着您的数据模型与您在应用的各个屏幕中显示的内容非常匹配。
对于聊天应用,您可能会显示该用户所属的用户或单个聊天室的聊天室列表。因此,鉴于我刚才所说的,我们应该在数据库中对这些确切的项目进行建模。
userChatrooms
userid1
chatroom1: true
chatroom2: true
userid2
chatroom1: true
chatroom3: true
chatrooms
chatroom1
chatmsg1
senderid: ...
receiverid: ...
使用此模型,您现在可以轻松确定用户的聊天室列表:/userChatrooms/{aut.uid}
。
要获得精彩的介绍,请阅读Firebase documentation on data structuring,此article on NoSQL data modeling并观看我们的视频系列Firebase for SQL developers。