繁体   English   中英

Android Livedata 与 RxJava Single 在房间数据库中不起作用

[英]Android Livedata with RxJava Single not work in Room Database

我将 Room 和 RxJava Single与 Livedata 一起使用,它不起作用。
我尝试了两种方式。 我不知道为什么第二个有效,为什么第一个无效。

(1) 通过 Single 获取 List -> 不起作用
(2) 通过 Livedata 获取 List -> 工作

(1) 通过 Single 获取 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) {
            ...
        }
    }

它在创建片段时起作用,但在更改时数据不会更新。

(2)通过Livedata获取List

@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM