[英]Android: clean architecture with Room database and LiveData in DAO
[英]Android Livedata with RxJava Single not work in Room Database
我将 Room 和 RxJava Single
与 Livedata 一起使用,它不起作用。
我尝试了两种方式。 我不知道为什么第二个有效,为什么第一个无效。
(1) 通过 Single 获取 List -> 不起作用
(2) 通过 Livedata 获取 List -> 工作
道
@Dao
interface DiaryDao {
@Query("SELECT * FROM Review")
fun getAllReview() : Single<List<Review>> // <- See the return type!
}
ViewModel我使用了Repository模式(dao的返回类型和repository的返回类型相同)
private val _reviewData = MutableLiveData<List<Review>>()
val reviewData : LiveData<List<Review>>
get() = _reviewData
fun getAllReview(){
addDisposable(repo.getAllReview()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
_reviewData.value=it
},{
Log.d(TAG, it.localizedMessage)
})
)
}
分段
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.getAllReview()
viewModel.reviewData.observe(viewLifecycleOwner) {
...
}
}
它在创建片段时起作用,但在更改时数据不会更新。
道
@Dao
interface DiaryDao {
@Query("SELECT * FROM Review")
fun getAllReview() : LiveData<List<Review>> // <- See the return type!
}
视图模型
private val _reviewData : LiveData<List<Review>> = repo.getAllReview()
val reviewData : LiveData<List<Review>>
get() = _reviewData
分段
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.reviewData.observe(viewLifecycleOwner) {
// it works!
}
}
当数据发生变化时,它工作得很好。
我期待您的建议。
如果您想查看任何其他代码,请告诉我。
Single<List<Review>>
是一个单一的操作,它要么返回数据,要么不返回,而且只执行一次。 你想要的是Flowable<List<Review>>
。 这将允许您订阅数据库并监视更改,当发生更改时,它将向其订阅者报告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.