首页 > 解决方案 > 如何从 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> ,我不知道如何从该结构中获取实际列表。

标签: androidkotlinviewmodelwrapper

解决方案


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
}

推荐阅读