Android Room - 如何仅获取新数据?

问题描述 投票:1回答:1

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

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

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

要么

2 - 改变后只会发出新旧messages之间的差异吗?

在哪个文件中指定了?如果首先,我该怎么做才能找到差异 - 像DiffUtils或其他方法?

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

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

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.