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