如何从我的 ViewModel (Kotlin) 中的包装器 class 中提取数据
How can I extract data from a wrapper class in my ViewModel (Kotlin)
我创建了一个 DataState 包装器 class 来包装我从我拥有的 Api 服务获得的数据。 class结构如下
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 class,我存储数据并从我的 Fragment 或 Activity 观察它们。在我的 ViewModel 中,我像这样存储数据
private val _dataList: MutableLiveData<DataState<List<CustomData>>> = MutableLiveData()
val dataList: LiveData<DataState<List<CustomData>>>
get() = _dataList
然后在我的 Activity 中,当更改成功发生时我可以观察到数据,但问题是当我想访问更改发生后已经在我的 ViewModel 中获取的数据时。
当我打电话时
viewModel.dataList.value
返回的类型是 DataState,我不知道如何从该结构中获取实际列表。
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
}
我创建了一个 DataState 包装器 class 来包装我从我拥有的 Api 服务获得的数据。 class结构如下
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 class,我存储数据并从我的 Fragment 或 Activity 观察它们。在我的 ViewModel 中,我像这样存储数据
private val _dataList: MutableLiveData<DataState<List<CustomData>>> = MutableLiveData()
val dataList: LiveData<DataState<List<CustomData>>>
get() = _dataList
然后在我的 Activity 中,当更改成功发生时我可以观察到数据,但问题是当我想访问更改发生后已经在我的 ViewModel 中获取的数据时。
当我打电话时
viewModel.dataList.value
返回的类型是 DataState,我不知道如何从该结构中获取实际列表。
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
}