我在kotlin中将Retrofit 2.0和MVVM模式一起使用,并且能够通过我的活动中的存储库和ViewModel观察Retrofit的API结果。
现在我的问题是,对于每个API调用,我必须在ViewModel中创建一个单独的LiveData,并为我的Activity中的每个LiveData并行创建一个单独的观察者,我觉得这是在复制代码。我觉得可以在Activity中观察到ViewModel中相同的LiveData,但是主要问题是要识别每个请求的API响应。有什么办法可以识别这一点?如果是,我只需要创建一个观察者,我就可以基于此标识符来处理每个API的响应。
我在各种博客上都读过很多,但是都没有清楚地描述最佳实践。请这里的所有人启发我的道路,并帮助我以最好的方式做到这一点。
提前感谢。
您可以使用这样的枚举或密封类创建状态参数:
enum class State { ApiOneSuccess, ApiTwoSuccess, Error }
然后您在ViewModel中将这种状态的LiveData设置为:
val liveState = MutableLiveData<State>()
我不知道您用于API回调的内容,但是您应该将liveState.postValue(ApiOneSuccess)
放在第一个API的onSuccess回调中,并对onError和第二个API进行相同的操作
然后您可以在活动的onCreate中观察此LiveData并执行适当的操作:
viewModel.liveState.observe(this) { state ->
state?.also {
when (it) {
ApiOneSuccess -> { // do what you need to do }
ApiOneSuccess -> { // do what you need to do }
Error -> { // do what you need to do }
}
viewModel.liveState.postValue(null)
}
}
}
我希望这个概念对您来说很清楚