我的安卓应用程序,我正在使用FirebaseDatabse
编写聊天应用程序。数据的结构为:
"message": {
"user1_guid": {
"user2_guid": {
"messageGuid": < MessageObject > ,
"messageGuid": < MessageObject > ,
"messageGuid": < MessageObject > ,
...
},
"user_n_guid": {
"messageGuid": < MessageObject > ,
"messageGuid": < MessageObject > ,
"messageGuid": < MessageObject > ,
...
},
},
"user2_guid": {
"user1_guid": {
"messageGuid": < MessageObject > ,
"messageGuid": < MessageObject > ,
"messageGuid": < MessageObject > ,
...
},
"user_n_guid": {
"messageGuid": < MessageObject > ,
"messageGuid": < MessageObject > ,
"messageGuid": < MessageObject > ,
...
},
}
}
要加载user1的聊天详细信息,我可以这样做:
final DatabaseReference lDatabaseReference = lDatabase
.child("message")
.child(sender)
.child(mChatPartnerGuid);
并将其加载到 A FirebaseRecyclerAdapter(MessageData,ChatDetailsAdapter.MessageViewHolder)
但我现在想要的是做一个ChatOverviewFragment
.它应该只显示每个用户的最新消息,数据库中有一个对话(就像在WhatsApp中一样(。使用FirebaseRecyclerAdapter
意味着必须在所有对话的所有消息中下载整个数据库......
难道没有更好的方法来执行查询,只过滤活动用户与之对话的每个用户的第一条消息吗?特别是我不知道>如何将其加载到FirebaseRecyclerAdapter
中。谢谢:)
你要做的是调整你的数据库结构,使其满足你的需求。我要做的是创建一个节点,为每个用户创建一个节点,其中包含每个用户收到的最新消息。为了减少"无用"冗余并避免损坏的数据,我也会更改您到目前为止构建并与我们共享的内容。
"messages": {
"messageId": {
"text": string,
"date": long,
"sender": string,
"receiver": string
}
},
"last-messages": {
"userReceiver": {
"sender1": messageId,
"sender2": messageId,
[...]
},
[...]
}
如果要按请求对它们进行排序,只需将"sender1": messageId
更改为"sender1": { "messageId": messageId", "date":long}
好吧,如果我正确理解您的要求,如果您使用 push(( 为消息创建 id,也许使用 1 作为参数的 limitToLast 方法可以完成这项工作