使LiveData在同一视图中观察多个改装请求

问题描述 投票:0回答:1

我在kotlin中将Retrofit 2.0和MVVM模式一起使用,并且能够通过我的活动中的存储库和ViewModel观察Retrofit的API结果。

现在我的问题是,对于每个API调用,我必须在ViewModel中创建一个单独的LiveData,并为我的Activity中的每个LiveData并行创建一个单独的观察者,我觉得这是在复制代码。我觉得可以在Activity中观察到ViewModel中相同的LiveData,但是主要问题是要识别每个请求的API响应。有什么办法可以识别这一点?如果是,我只需要创建一个观察者,我就可以基于此标识符来处理每个API的响应。

我在各种博客上都读过很多,但是都没有清楚地描述最佳实践。请这里的所有人启发我的道路,并帮助我以最好的方式做到这一点。

提前感谢。

android kotlin mvvm retrofit2 android-livedata
1个回答
0
投票

您可以使用这样的枚举或密封类创建状态参数:

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)
            }
        }
    }

我希望这个概念对您来说很清楚

© www.soinside.com 2019 - 2024. All rights reserved.