android - 如何从 ViewModel (Kotlin) 中的包装类中提取数据
问题描述
我创建了一个 DataState 包装类来包装从我拥有的 Api 服务获得的数据。类结构如下
sealed class DataState<out R> {
data class Success<out T>(val data: T): DataState<T>()
data class Error(val exception: Exception): DataState<Nothing>()
object Loading: DataState<Nothing>()
object Empty: DataState<Nothing>()
}
我有一个 ViewModel 类,用于存储数据并从我的 Fragment 或 Activity 中观察它们。在我的 ViewModel 中,我像这样存储数据
private val _dataList: MutableLiveData<DataState<List<CustomData>>> = MutableLiveData()
val dataList: LiveData<DataState<List<CustomData>>>
get() = _dataList
然后在我的活动中,我可以在成功发生更改时观察数据,但问题是当我想在发生更改后访问已经在 ViewModel 中获取的数据时。
当我打电话时
viewModel.dataList.value
返回的类型是 DataState<List> ,我不知道如何从该结构中获取实际列表。
解决方案
ViewModel
正在返回state
,您需要使用when
语句来获取相应的data
val dataState = viewModel.dataList.value
when(dataState){
is Success -> {
val customerList = dataState.data
// you can access your list directly using data state
}
is Error -> {
val error = dataState.exception
}
//same applies for other states
}
推荐阅读
- java - Maven jar 中没有主要清单
- javascript - 在 js 中使用 html 显示错误
- angular - Angular 4 OnClick 选项卡
- sql - 为每个记录增加一个变量
- java - java Authenticator 类不在 POST 上进行身份验证
- javascript - npm install 和流星 npm install 有什么区别
- vba - 在excel中使用VBA删除列
- asp.net - Window server 2016 - HTTP 错误 503 服务不可用
- android - 以前的活动在查看页面更改时被破坏
- php - Android Studio 使用 Android Volley 登录