LiveData обновляет мой наблюдаемый, когда происходят изменения в базе данных комнат - PullRequest
0 голосов
/ 05 июня 2019

Я использую LiveData для отображения количества записей в таблице в комнате. Я вызываю функцию, которая получает этот счетчик, и после его получения вызывается наблюдатель, который отображает счет. Это работает как ожидалось. Но у меня также есть запущенная служба, которая извлекает данные из серверной части и сохраняет их в той же таблице, из которой я считываю счетчик. Но всякий раз, когда данные сохраняются, наблюдаемое вызывается каждый раз, и отображаемое количество обновляется. Я не уверен, почему это происходит. Я действительно хочу, чтобы это произошло. Я просто не понимаю, почему это происходит. Когда я запускаю свой код для получения счетчика, это делается с помощью RxJava. Поэтому, когда вызов завершается, я не вижу причин, по которым наблюдаемое количество будет обновляться с каждым хранилищем данных. Единственная возможная причина в том, что Room отслеживает мой запрос на счетчик и выполняет его всякий раз, когда сохраняются данные. Это возможно? Вот мой код для получения счета:

Замечено в моем фрагменте:

viewModel.onConnectionsCountRetrieved.observe(this, Observer { count ->
    var title = getString(R.string.connections)

    if (count > 0)
        title += " (" + "%,d".format(count) + ")"

    (activity as MainActivity).getSupportActionBar()?.title = title
})

На мой взгляд модель:

val onConnectionsCountRetrieved: MutableLiveData<Int> = MutableLiveData()

@SuppressLint("CheckResult")
fun getConnectionsCount() {
    val disposable = connectionsBO.getConnectionsCount()
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(
            { count -> onConnectionsCountRetrieved.postValue(count) },
            { ex -> App.context.displayErrorMessage(R.string.problem_retrieving_total_connection_count) }
        )

    disposables.add(disposable)
}

1 Ответ

2 голосов
/ 05 июня 2019

Из комнаты документация :

Наблюдаемые запросы

При выполнении запросов вам часто нужно обновить пользовательский интерфейс вашего приложения для обновленияавтоматически при изменении данных.Для этого используйте возвращаемое значение типа LiveData в описании метода запроса.Room генерирует весь необходимый код для обновления LiveData при обновлении базы данных.

Room также предлагает те же функции для RxJava.Вы можете увидеть реализацию вашего запроса в сгенерированном классе YourDao_Impl.java.

...