会议室数据库加载聊天室时获取最后的聊天室消息

翁卡

我正在开发一个聊天应用程序,其中消息被保存在离线室数据库中

我有两张桌子

Contact
   - contact_id
   - contact_name
   - about

ChatMessage
   - contact_id
   - content
   - received_at

在聊天屏幕上,我通过查询联系人表来显示最近的聊天记录,但是我试图显示最近的聊天记录,因此更好的方法是查询ChatMessage表以获取唯一的最新消息并检索联系人信息(如姓名)

所以我实施了一种非常糟糕的方法(可能是最糟糕的方法),其中包括

1.获取所有聊天消息

2.按contact_id与最近的聊天分组

3.在for循环查询中,获取联系人行,并将名称附加到主要对象列表中

4.在回收站视图中显示列表

我想知道是否有更好的方法可以做到这一点

我认为关系或联接可以提供帮助,但是我不知道它们或它们在房间DB中的实现

任何帮助将不胜感激

谢尔盖·季霍诺夫

检查Java中的下一种方法(但对Kotlin来说,想法是相同的):

  1. message_id(主键)添加到您的ChatMessage实体。
  2. 除了ContactChatMessage实体,再添加一个类LastMessages(不是实体,只是POJO):
public class LastMessage {

    @Embedded
    public ChatMessage lastMessage;

    @Relation(
        parentColumn = "contact_id",
        entityColumn = "contact_id"
    )
    public Contact contact; 

}
  1. 在您的dao中添加下一个方法:
@Transaction
@Query("SELECT * FROM chat_message AS cm JOIN (SELECT contact_id, max(received_at) AS received_at FROM chat_message GROUP BY contact_id) AS cm_last ON cm_last.contact_id = cm.contact_id AND cm_last.received_at = cm.received_at")
public List<LastMessage> getLastMessages();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章