我已经在互联网上进行搜索,但是找不到关于此的最新示例。关于这个问题的大多数研究对象和实例github
已有4年的历史。这就是为什么我决定问问题。
我在我的应用中使用MVVM
。 Retrofit
用于网络请求,也用于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
})
//...
您可以这样应用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()
}