【发布时间】:2020-06-26 07:49:56
【问题描述】:
我在我的应用程序中使用 MVVM 架构,我想从活动的视图模型类发出 API 请求。这里的问题是我没有得到最好的方法。由于 viewmodel 已经知道该活动的生命周期,因此不需要为 API 创建单独的 viewmodel 类吗?如果是这样,那么我应该从 viewmodel 类触发正常的改造请求,还是在这种情况下最好的方法是什么?
我之前在没有 MVVM 的情况下所做的是:
class UserViewModel : ViewModel() {
private val cd = CompositeDisposable()
val status: MutableLiveData<Boolean>? = MutableLiveData<Boolean>()
val responseImages = MutableLiveData<ResponseImages>()
fun getImages(text: String) {
cd.add(
RetrofitHelper.apiInstance.getImages(Site.METHOD, Site.KEY, text)
.myApiSubscriber(status)
.subscribe({
responseImages.postValue(it)
}, {
it.printStackTrace()
})
)
}
private fun <T> Single<T>.myApiSubscriber(status: MutableLiveData<Boolean>?): Single<T> {
return this.doOnSubscribe {
status?.postValue(true)
// Utils.debugger("PROGRESS ", " doOnSubscribe")
}.doFinally {
status?.postValue(false)
// Utils.debugger("PROGRESS ", " doFinally")
}.subscribeOn(Schedulers.io())
}
override fun onCleared() {
cd.dispose()
super.onCleared()
}
fun callCleared() {
onCleared()
}
}
那么上述方法在 MVVM 的情况下是否仍然有用,以及 MVVM 遵循的最佳方法是什么? 请提出建议。
【问题讨论】:
-
你可以用不同的方式来做。我发现以下文章对 2021 MVVM 非常清晰和有用 - Retrofit 支持“暂停功能”,现在调用非常简单(不需要 .myApiSubscriber(status).subscribe 等)。在 ViewModel 中使用 LiveData 并在存储库中暂停 fun(或 Flow):proandroiddev.com/…
标签: android mvvm android-lifecycle rx-android android-mvvm