我建议你使用Rxjava它。
随着android.arch.persistence.room:rxjava2:1.1.1在你的依赖帮助,您可以直接观察你的数据库的变化。
Dao.kt
@Query("SELECT * FROM table")
abstract fun getAllData(): Flowable>
知识库
fun getDataFromDb():Flowable>= 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
}
另外一点需要注意的
房间只知道该表已被修改,但不知道为什么,什么发生了变化。因此,重新查询后,查询的结果由LiveData或可流动的发射。由于房间不保留在内存中的任何数据,并不能假定对象有equals()方法,它不能告诉这是否是相同的数据或not.You需要确保你的DAO排放的过滤器,只反应不同的对象。
如果观察到的查询使用悬浮剂来实现,用可流动#distinctUntilChanged
Flowable = repository.getDataFromDb()
.distinctUntilChanged{previous,next-> //here you can check for difference }
你可以按照这个链接,更详细