【问题标题】:What's an efficient way to retrieve chat messages from Realm?从 Realm 检索聊天消息的有效方法是什么?
【发布时间】:2019-05-24 07:45:34
【问题描述】:

我正在使用 FCM 创建一个聊天应用程序,因此正在使用令牌和主题。在我的应用程序中,我创建了一个 POJO,它扩展了 RealmObject,用于存储来自不同用户 ID 的聊天消息以及我在私人聊天和群组中发送的聊天消息。 但我不明白的是,我应该如何构建领域查询来检索收到的消息和我发送到用户 ID 的消息。

我正在考虑尝试:

RealmResults<ChatModel> results=mDatabase.where(TestChatModel.class)
                                .equalTo("sender",<Person with whom Im chatting's userID >)
                                .or()
                                .equalTo("receiver",<Person with whom Im chatting's userID >)
                                .and()
                                .equalTo("sender",<My userID >)
                                .or()
                                .equalTo("receiver",<My userID >
                                .sort("timestamp")
                                .findAll();

但这似乎非常低效和混乱。

我的 POJO 是:

public class TestChatModel {
    private String chatMessage;
    private String timestamp;
    private String sender;
    private String receiver;
    private String topicName; // Set to NA is private-chat
    private int isTopic;      // Set to 0 for private-chat and Set to 1 for 
                              // group
.
.
.
//Associated constructors and getters and setters
.
.
}

非常感谢社区的帮助,在此先感谢!

【问题讨论】:

    标签: java android database realm firebase-cloud-messaging


    【解决方案1】:

    您的查询看起来不错。你所能做的就是写下查询逻辑,然后翻译成 Realm 查询语法。如果您的意图是创建一个具有以下条件的查询:

    1. 特定的人是发送者或接收者,并且
    2. 发送者或接收者的登录用户

    那么这可能是最好的方法。这假设您拥有与 Realm 中每个人之间的所有消息;如果您要应用其他一些规则(例如,您只有消息,包括领域中的登录用户),那么您可以放弃第 2 条,因为这是暗示的。例如,如果您的 API 只为登录用户提供消息(这似乎是一个合理的场景)。这将提高效率并简化查询。

    就提高效率的其他方法而言,很可能(尽管我没有直接证据)为用户使用数字 ID 而不是字符串 ID 将允许在 Realm 中进行更有效的比较和过滤。这会更好,但可能取决于您的 API(再次)。

    最后,如果仍然如上所示,可能值得在查询中添加“括号”,以确保按您期望的方式评估运算符(即 OR 中间的 AND)。这可以通过查询中的beginGroupendGroup 来完成(如here 所述)。

    【讨论】:

      猜你喜欢
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 2014-05-14
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多