Я новичок в MVVVM и модернизации Я успешно внедрил MVVM и могу перемещать данные из модернизации в репозиторий, затем из репозитория в ViewModel и просматривать.
При этом я столкнулся с огромной путаницей, которая упомянуто ниже. В первом сценарии мой код выглядит следующим образом:
Репозиторий:
fun iniateOTPprocess() : LiveData<GenericResponse> {
RetroUtils.getApiManager().listRepos().enqueue(object : RetrofitCallback() {
override fun onResponse(call: Call<GenericResponse>, response: Response<GenericResponse>) {
super.onResponse(call, response)
result.value = response.body()
}
}
)
return result
}
ViewModel:
class LoginViewModel2(application: Application) : AndroidViewModel(application) {
lateinit var username: MutableLiveData<String>
lateinit var password: MutableLiveData<String>
var repository: LoginRepository = LoginRepository(application)
var data = MediatorLiveData<GenericResponse>()
var result = MutableLiveData<GenericResponse>()
init {
data.addSource(result , Observer {
data.postValue(it)
})
}
fun onLoginBtnCLicked() {
initiateOTP()
}
private fun initiateOTP() {
result = repository.iniateOTPprocess()
}
fun getResponse() : MediatorLiveData<GenericResponse>{
return data
}
}
Действительные данные посредника никогда не обновляются таким образом, как только данные обновлено.
Но если я изменю этот код на
Репозиторий
class LoginRepository(var application: Application) {
var callback: RetrofitCallback = RetrofitCallback()
var result = MutableLiveData<GenericResponse>()
fun iniateOTPprocess() {
RetroUtils.getApiManager().listRepos().enqueue(object : RetrofitCallback() {
override fun onResponse(call: Call<GenericResponse>, response: Response<GenericResponse>) {
super.onResponse(call, response)
result.value = response.body()
}
}
)
}
fun getData(): MutableLiveData<GenericResponse> {
return result
}
}
ViewModel
class LoginViewModel2(application: Application) : AndroidViewModel(application) {
lateinit var username: MutableLiveData<String>
lateinit var password: MutableLiveData<String>
var repository: LoginRepository = LoginRepository(application)
var data = MediatorLiveData<GenericResponse>()
var result = MutableLiveData<GenericResponse>()
init {
data.addSource(repository.getData(), Observer {
data.postValue(it)
})
}
fun onLoginBtnCLicked() {
initiateOTP()
}
private fun initiateOTP() {
repository.iniateOTPprocess()
}
fun getResponse() : MediatorLiveData<GenericResponse>{
return data
}
}
Этот код начинает работать магическим образом. В представлении я наблюдаю метод getResponse () в обоих сценариях ios. Может ли кто-нибудь здесь помочь с путаницей и может объяснить, где происходят маги c. Заранее спасибо.