android - 更新 Room 数据库时未触发 LiveData
问题描述
我有ViewPager
2 个片段。当列表在一个片段上更新时,它应该反映另一个片段上的更改。
这就是我Dao
的更新方法的样子
@Query("SELECT * FROM ${Constants.KAFANI_TABLE_NAME} WHERE isFavorite = 1")
fun getFavoriteKafani(): Single<MutableList<Kafana>>
@Query("UPDATE ${Constants.KAFANI_TABLE_NAME} SET isFavorite = :isFavorite WHERE id = :id")
fun setFavourite(id: Int, isFavorite: Int)
然后,我在我的内部调用这些方法repository
fun getFavoriteKafani(): Single<MutableList<Kafana>> {
return kafanaDao.getFavoriteKafani()
}
fun setKafanaFavorite(kafana: Kafana, isFavorite: Int): Completable = Completable.fromCallable {
kafanaDao.setFavourite(kafana.id, isFavorite)
}
我的ViewModel
fun setFavorite(kafana: Kafana, isFavorite: Int) {
compositeDisposable.addAll(kafanaRepository
.setKafanaFavorite(kafana, isFavorite)
.compose(scheduler.getSchedulersForCompletable())
.subscribeBy(
onComplete = {
sendFavoriteUpdate(1)
Timber.d("${Constants.KAFANA_APP_TAG} Added as favorite ${kafana.name}")
},
onError = {
Timber.d("${Constants.KAFANA_APP_TAG} setFavorite onError ${it.localizedMessage}")
}
))
}
fun loadFavoriteKafani() {
compositeDisposable.addAll(kafanaRepository
.getFavoriteKafani()
.compose(scheduler.getSchedulersForSingle())
.subscribeBy(
onSuccess = {
if (it.isEmpty()) {
isFavoriteEmpty.set(true)
Timber.d("${Constants.KAFANA_APP_TAG} loadFavoriteKafani listIsEmpty")
} else {
kafaniList.value = it
isFavoriteEmpty.set(false)
Timber.d("${Constants.KAFANA_APP_TAG} loadFavoriteKafani listNotEmpty")
}
},
onError = {
isFavoriteEmpty.set(true)
Timber.d("${Constants.KAFANA_APP_TAG} loadFavoriteKafani OnError: $it.localizedMessage")
}))
}
最后在我的fragment
private fun getFavoriteKafani() {
viewModel.loadFavoriteKafani()
viewModel.kafaniList.observe(this, Observer<MutableList<Kafana>> {
it?.let {
sorted = it.sortedWith(compareBy({ !it.isSponsored }, { it.name })).toMutableList()
kafanaAdapter = KafanaAdapter(sorted, this, 2)
binder.rvKafani.adapter = kafanaAdapter
}
})
}
但是,每当我在一个片段中将 kafana 设置为收藏夹时,该列表不会在另一个片段中触发。
解决方案
推荐阅读
- angular - 不应存在的角材料日期范围选择器错误角10
- c# - SQL 错误“您未连接,因为网络上存在重复名称”
- snipcart - 如何防止每次将商品添加到购物车时出现购物车?
- reactjs - 有条件地从组件中移除道具
- sql - 按 Sql Server 中的一列分组并按未包含在聚合函数或 GROUP BY 子句中的另一列排序
- python - 如何验证和知道 URL 是否是 Google Docs URL?|Python,烧瓶|
- reactjs - custom-cra 为 JEST 编译 node_modules
- javascript - 如何将对象值数组转换为数字
- controller - Laravel 中的 PayPal 沙盒
- android - 如何模拟同伴lateinit var?