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