Я предлагаю вам использовать Rxjava для него.
С помощью android.arch.persistence.room:rxjava2:1.1.1
в вашей зависимости вы можете непосредственно наблюдать изменения в вашей базе данных.
Dao.kt
@Query("SELECT * FROM table")
abstract fun getAllData(): Flowable<List<TableData>>
Репозиторий
fun getDataFromDb():Flowable<List<TableData>>= database.dao().getAllData()
ViewModel
repository.getDataFromDb()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy{
//Todo here you will receive the data whenever there is any change in database
}
Также укажите на примечание
Комната знает только, что таблица была изменена, но не знает, почему и что изменилось.Следовательно, после повторного запроса результат запроса передается с помощью LiveData или Flowable.Так как Room не хранит никаких данных в памяти и не может предположить, что объекты имеют equals (), он не может определить, являются ли это те же данные или нет. Вам нужно убедиться, что ваш DAO фильтрует выбросы и реагирует только наотдельные объекты.
Если наблюдаемый запрос реализован с использованием Flowables, используйте Flowable # diverUntilChanged
Flowable<TableData> = repository.getDataFromDb()
.distinctUntilChanged{previous,next-> //here you can check for difference }
. Для более подробной информации перейдите по этой ссылке
https://medium.com/androiddevelopers/7-pro-tips-for-room-fbadea4bfbd1