如何与 MVVM 同步?



我正在研究mvvm。当我调用 init(( 时,第一次调用为 null。 使用改造,我认为原因是函数getIndexRetrofit()在行执行data.value = res之前返回。所以我想同步它,期望函数返回的不是 null 而是响应值。

存储 库:

fun getIndexRetrofit(name:String) : MutableLiveData<UserModel>{   
Retrofit2Service.getService().requestUserInfo(name).enqueue(object: Callback<UserModel> {
override fun onFailure(call: Call<UserModel>, t: Throwable) {
data.postValue(null)
}
override fun onResponse(call: Call<UserModel>, response: Response<UserModel>) {
if(response.body()!=null) {
var res = response.body()!!
data.value = res
}
}
})//Retrofit
return data
}

我不能说getIndexRetrofit()应该做什么,但我相信你在这里滥用了实时数据。您正在进行异步调用Retrofit2Service.getService().requestUserInfo(name).enqueue它将被调用,将发出请求,但尚未收到执行结果,同时return data会发生。

了解onFailure()onResponse()是回调,代码不会立即执行。您的代码不应按顺序从上到下阅读。接下来是执行顺序

  1. Retrofit2Service.getService().requestUserInfo(name).enqueue
  2. return data
  3. onResponse()onFailure()

你不应该在getIndexRetrofit()中返回任何内容,而是重构你的函数,看起来像这样

fun getIndexRetrofit(name:String) {   
Retrofit2Service.getService().requestUserInfo(name).enqueue(object: Callback<UserModel> {
override fun onFailure(call: Call<UserModel>, t: Throwable) {
data.postValue(null)
}
override fun onResponse(call: Call<UserModel>, response: Response<UserModel>) {
if(response.body()!=null) {
var res = response.body()!!
data.value = res
}
}
})
}

相关内容

  • 没有找到相关文章

最新更新