为什么第一个方法起作用(即从网络加载数据并将其移交给UI),但第二个方法却不起作用(即什么也不加载)
----------------第一种方法(有效)------------------ < / p>
查看(片段)
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调用。最后一个工作断点在NetworkBoundResource.kt
的第48行中接下来的问题是,如何使用实时数据手动刷新列表?例如,在后端删除一个元素后,实现拉动刷新或重新加载列表。