【发布时间】:2020-05-14 06:53:13
【问题描述】:
我正在使用 ViewModel 来获取设置片段所需的数据。当我调用 get viewModel.getItems().observer{} 时,它总是返回一个空列表,除非我更改设备方向或暂停并恢复片段。
class OnSaleListFragmentViewModel : ViewModel() {
private val items : MutableLiveData<List<Item>> by lazy {
MutableLiveData<List<Item>>().also {
loadItems()
}
}
private fun loadItems() {
viewModelScope.launch {
getDataFromDAO()
}
}
fun getItems() : LiveData<List<Item>> {
return items
}
private suspend fun getDataFromDAO() = withContext(Dispatchers.IO) {
val dao : DAO = DAO.instance
val data = async { dao.getItems() }
try {
items.postValue(data.await())
} catch (e : Exception) {
items.postValue(listOf())
}
}
【问题讨论】:
-
你确定你没有进入异常分支吗?
-
是的,没有引发异常
-
由于某些原因 items.value 第一次被调用时为空
-
这是有道理的,它是在后台线程上读取的。使用
.observe -
在片段中我这样做: viewmodel = ViewModelProvider(this).get(myFragment::class.java) viewmodel.getItems().observe(viewLifecycleOwner, Observer { myAdapter.reload(它)})
标签: android kotlin viewmodel android-livedata