Почему работает первое устройство (т. Е. Данные загружаются из сети и передаются в пользовательский интерфейс), а не второе (т. Е. Ничего не загружается)
---------------- Первый подход (работает) ------------------
Просмотр (фрагмент)
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 или перезагрузить список после того, как элемент был удален в серверной части.