ViewModel是否可以包含改造网络请求调用?

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

我已经在互联网上进行搜索,但是找不到关于此的最新示例。关于这个问题的大多数研究对象和实例github已有4年的历史。这就是为什么我决定问问题。

我在我的应用中使用MVVMRetrofit用于网络请求,也用于RxJava。我也在考虑使用LiveData。所以我有几个问题:

我可以在ViewModel中呼叫网络请求吗?这不是一个坏习惯吗?目前,我仅在ViewModel中发送网络请求,并且运行正常。但是,当我在文章中阅读时,我想优化我的ViewModel,我们应该使用Repository Pattern。我不知道如何实现这一点。如何实现此Repository Pattern

我未使用任何本地数据库。我所有的请求都转到API。任何建议将不胜感激。

MyViewModel

//....

api.registerUser()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .doOnSubscribe { }
            .doOnSuccess {  }
            .doOnError {  }
            .subscribe({
                //success
            }, {
                // handle errors
            })
//...
android rx-java retrofit2 repository-pattern android-mvvm
1个回答
0
投票

您可以这样应用MVVM,

LoginActivity.kt

loginViewModel.loginApiCall(it.email, it.password).observe(this,
                         Observer<Resource<User>> {

                            })

LoginViewModel.kt

    fun loginApiCall(email: String, password: String): LiveData<Resource<User>> {
        return logInRepository.login(email, password)
    }

LoginRepository.kt

    fun login(email: String, password: String): LiveData<Resource<User>> {
        return object : NetworkBoundResource<User>(appExecutors) {
            override fun createCall(): LiveData<ApiResponse<User>> {
                val jsonObject = JsonObject()
                jsonObject.addProperty("email", email)
                jsonObject.addProperty("password", password)
                return apiService.login(jsonObject)
            }
        }.asLiveData()
    }
© www.soinside.com 2019 - 2024. All rights reserved.