Android LiveData不适用于NetworkBoundResource

时间:2018-12-12 21:25:37

标签: android android-livedata android-mvvm

为什么第一个方法起作用(即从网络加载数据并将其移交给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行中

接下来的问题是,如何使用实时数据手动刷新列表?例如,在后端删除一个元素后,实现拉动刷新或重新加载列表。

0 个答案:

没有答案