房间数据库观察者

在 Room 数据库中,我想在通知的位置添加一些观察者:删除、插入、更新。

我确实通过创建一个接口来实现这一点,然后适配器实现它。因此,每次数据库事务之一结束时,都会在适配器上执行匹配操作。

但我不确定这是否是正确的方法,也许 rxjava 有一些方法?或者可能是 RecyclerView 中的 DiffUtil?


繁星淼淼
浏览 80回答 2
2回答

一只斗牛犬

我建议你使用 Rxjava。在您的依赖项的帮助下android.arch.persistence.room:rxjava2:1.1.1,您可以直接观察数据库中的变化。道.kt&nbsp; @Query("SELECT * FROM table")&nbsp; &nbsp; abstract fun getAllData(): Flowable<List<TableData>>存储库fun getDataFromDb():Flowable<List<TableData>>= database.dao().getAllData()视图模型repository.getDataFromDb().subscribeOn(Schedulers.io())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .observeOn(AndroidSchedulers.mainThread())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .subscribeBy{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Todo here you will receive the data whenever there is any change in database&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}还要注意Room 只知道该表已被修改,但不知道为什么以及发生了什么变化。因此,重新查询后,查询的结果由 LiveData 或 Flowable 发出。由于 Room 不会在内存中保存任何数据并且不能假设对象具有 equals(),因此它无法判断这是否是相同的数据。您需要确保您的 DAO 过滤排放并且只对不同的对象。如果 observable 查询是使用 Flowables 实现的,请使用 Flowable#distinctUntilChanged&nbsp; &nbsp;Flowable<TableData> = repository.getDataFromDb()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .distinctUntilChanged{previous,next-> //here you can check for difference }您可以点击此链接了解更多详情https://medium.com/androiddevelopers/7-pro-tips-for-room-fbadea4bfbd1

慕慕森

你应该从你的 Dao 方法中返回 LiveData 对象来观察 CRUD 操作。对您的存储库执行任何 CRUD 操作时,LiveData 将得到更新。然后您可以从您的存储库中获取更新的数据并反映适配器中的更改。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java