android - room - возвращает количество данных по запросу - PullRequest
0 голосов
/ 07 мая 2019

Я хочу вернуть количество строк из определенного запроса в мое представление, я использую модель представления

это мой класс DAO:

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

Я получаю его в моей модели представления следующим кодом:

 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 Ответ

6 голосов
/ 07 мая 2019

Используйте postValue(), а не value=, чтобы обновить MutableLiveData.

. Или используйте LiveDataReactiveStreams, чтобы преобразовать Observable в LiveData, вместо того, чтобы делать это вручную.

...