android-room-通过查询返回数据计数

时间:2019-05-07 12:06:25

标签: android android-sqlite android-room android-livedata android-viewmodel

我想将某个查询的行数返回到我的视图,我正在使用视图模型

这是我的DAO课:

 @Query("select COUNT(id) from ${db_cardsTable} where date_review>=:date and catId=:catId")
fun getNumUnread(catId: String,date:String): Int

我通过以下代码在viewModel中得到它:

 class CardViewModel(private val model: CardModel) : ViewModel() {
    var num = MutableLiveData<Int>()
fun haveCardForReading(catId: String,date:String): LiveData<Int> {
        val dbConnection = DbConnection.getInstance(MyApp.INSTANCE)!!
        val cardDao = dbConnection.CardDao()

        Observable.just(DbConnection)
            .subscribeOn(Schedulers.io())
            .subscribe({ db ->
                num.value=cardDao.getNumUnread(catId,date)
            }, { error ->
                Log.v("this", "ErrorNumCat ${error.localizedMessage}")
            })

        return num
    }

这是我的活动类,用于读取值:

vm.haveCardForReading(catId,LastUpdate(this).makeCurrectDate())
            .observe(this, Observer {
                Log.v("this","cardsToRead $it")

            }
        })

通过运行我的代码,我得到此错误:

无法在后台线程上调用setValue

我该如何解决?我只需要通过查询返回行数

1 个答案:

答案 0 :(得分:6)

使用postValue()而不是value=来更新MutableLiveData

或者,使用LiveDataReactiveStreamsObservable转换为LiveData,而不是手动进行。