如何从我的 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
}