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