1

Dao在数据库中插入一些messages后,这个方法的结果是什么:

@Query("SELECT * FROM messages")
Flowable<List<Message>> getMessages();

1 -存储在数据库中的所有 messages 将在此更改后发出

或者

2 -更改后只会发出DIFFERENCE beetwen new 和 old s?message

在哪些文件中指定?如果首先,我应该怎么做才能有所作为 - 类似DiffUtils或有其他方法?

PS如果我删除一些消息怎么办?

4

1 回答 1

0
  1. 将发出存储在数据库中的所有消息。
  2. 为了获得差异,推荐的方法是使用您提到的DiffUtils 。有很多关于它如何工作以及如何实现它的信息。在这里只提几个,你有这个Mindorks 的教程@iammert 教程
  3. 如果您不想在每次更改时都获取所有消息,则可以编写不同的查询。这取决于您的用例,但是,例如,如果您知道旧消息不会更改,您可以有一个查询在某个日期之后返回所有消息。
  4. 如果您删除一些消息,查询的结果将会改变。因此,您将再次发出所有消息。
  5. 我会LiveData<List<Message>>改用。行为是相同的,您无需担心处置订阅,也无需担心配置更改。但是,当您必须返回单个结果时,我会使用Singleor 。Maybe

更新:您可以检索消息的子集并按需更新,而不是使用 DiffUtils 获取所有消息并查看它们之间的差异。Android 中新的Paging 库可以帮助您做到这一点。同样,有很多关于如何做到这一点的信息,所以我不打算在这里介绍实现的细节,因为它超出了问题的范围,但是在这里你有许多可用的教程之一。

于 2019-04-28T17:15:18.633 回答