Android Room - 如何只获取新数据?
Android Room - how to get the new data only?
在数据库中插入一些 message
后,此 Dao
方法的结果是什么:
@Query("SELECT * FROM messages")
Flowable<List<Message>> getMessages();
1 - ALL message
s 存储在数据库中将在此更改后发出
或
2 - 只有 DIFFERENCE beetwen new and old message
s will be emitted after the change?
在哪些文件中规定的?如果首先,我应该怎么做才能有所不同 - 比如 DiffUtils
或者还有其他方法?
P.S。如果我 删除 一些消息怎么办?
- 所有个存储在数据库中的消息将被发出。
- 要获得差异,推荐的方法是使用 DiffUtils as you mentioned. There is a lot of information about how it works and how to implement it. Just to mention a few here you have this Mindorks' tutorial and @iammert tutorial
- 如果您不想在某些消息每次更改时都获取所有消息,您可以编写不同的查询。这取决于您的用例,但是,例如,如果您知道旧消息不会更改,则可以查询 return 某个日期后的所有消息。
- 如果您删除了一些消息,查询结果将会改变。因此,您将再次发出所有消息。
- 我会改用
LiveData<List<Message>>
。行为是一样的,你不需要担心处理你的订阅,也不用担心配置更改。但是,当您必须 return 单个结果时,我会使用 Single
或 Maybe
。
更新: 无需使用 DiffUtils 获取所有消息并查看它们之间的区别,您可以检索消息的子集并按需更新它。新 Paging library in Android helps you doing this. Again, there is a lot of information around about how to do this so I am not going to put the details of the implementation here because it is out of the scope of the question, but here you have one of the many tutorials 可用。
在数据库中插入一些 message
后,此 Dao
方法的结果是什么:
@Query("SELECT * FROM messages")
Flowable<List<Message>> getMessages();
1 - ALL message
s 存储在数据库中将在此更改后发出
或
2 - 只有 DIFFERENCE beetwen new and old message
s will be emitted after the change?
在哪些文件中规定的?如果首先,我应该怎么做才能有所不同 - 比如 DiffUtils
或者还有其他方法?
P.S。如果我 删除 一些消息怎么办?
- 所有个存储在数据库中的消息将被发出。
- 要获得差异,推荐的方法是使用 DiffUtils as you mentioned. There is a lot of information about how it works and how to implement it. Just to mention a few here you have this Mindorks' tutorial and @iammert tutorial
- 如果您不想在某些消息每次更改时都获取所有消息,您可以编写不同的查询。这取决于您的用例,但是,例如,如果您知道旧消息不会更改,则可以查询 return 某个日期后的所有消息。
- 如果您删除了一些消息,查询结果将会改变。因此,您将再次发出所有消息。
- 我会改用
LiveData<List<Message>>
。行为是一样的,你不需要担心处理你的订阅,也不用担心配置更改。但是,当您必须 return 单个结果时,我会使用Single
或Maybe
。
更新: 无需使用 DiffUtils 获取所有消息并查看它们之间的区别,您可以检索消息的子集并按需更新它。新 Paging library in Android helps you doing this. Again, there is a lot of information around about how to do this so I am not going to put the details of the implementation here because it is out of the scope of the question, but here you have one of the many tutorials 可用。