Android LiveData не работает с NetworkBoundResource - PullRequest
0 голосов
/ 13 декабря 2018

Почему работает первое устройство (т. Е. Данные загружаются из сети и передаются в пользовательский интерфейс), а не второе (т. Е. Ничего не загружается)

---------------- Первый подход (работает) ------------------

Просмотр (фрагмент)

override fun onResume() {
  super.onResume()
  viewModel.getEntries().observe(this, Observer { entryList -> handleListUpdate(entryList) })
}

ViewModel

fun getEntries(): LiveData<List<Entry>?> {
    return Transformations.map(repository.getEntries()) { it.data }
}

---------------- Второй подход (не работает) ------------------

Просмотр (фрагмент)

override fun onResume() {
  super.onResume()
  viewModel.entries.observe(this, Observer { entryList -> handleListUpdate(entryList) })
  viewModel.updateEntries()
}

ViewModel

val entries = MutableLiveData<List<Entry>?>()

fun updateEntries(): LiveData<List<Entry>?> {
    entries.value = getEntries().value
}

Для обоих подходов я использую следующую реализацию repository.getEntries():

fun getEntries(forceUpdate: Boolean = true): LiveData<Resource<List<Entry>>> {
    return object : NetworkBoundResource<List<Entry>, List<Entry>>(AppExecutors.instance) {
        override fun saveCallResult(item: List<Entry>) = database.getEntryDao().insert(item)
        override fun shouldFetch(data: List<Entry>?): Boolean = forceUpdate || (data == null) || data.isEmpty()
        override fun loadFromDb() = database.getEntryDao().getAll()
        override fun createCall() = apiService.getEntries()
    }.asLiveData()
}

Второй подход просто ничего не делает.Я не получаю никаких ошибок, и HTTP-вызов не выполняется.Последняя рабочая точка останова находится в строке 48 NetworkBoundResource.kt

Последующим вопросом будет, как мне выполнить обновление моего списка вручную, используя текущие данные?Например, чтобы реализовать функцию pull-to-refresh или перезагрузить список после того, как элемент был удален в серверной части.

...