如何在FirebaseDatabase不加载整个数据库的情况下创建ChatOverViiew Query



我的安卓应用程序,我正在使用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 方法可以完成这项工作

相关内容

  • 没有找到相关文章

最新更新