如何与 mvvm 同步?
how can I syncronize with mvvm?
我正在研究mvvm。当我调用 init() 时,第一个调用为空。
使用改造,我认为原因是函数 getIndexRetrofit()
在行执行 data.value = res
之前被 returned。所以我想同步这个,期望函数 return 不是 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()
是回调,不会立即执行代码。您的代码并不意味着要从上到下顺序阅读。接下来的执行顺序是
Retrofit2Service.getService().requestUserInfo(name).enqueue
return data
onResponse()
或 onFailure()
你不应该 return 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
}
}
})
}
我正在研究mvvm。当我调用 init() 时,第一个调用为空。
使用改造,我认为原因是函数 getIndexRetrofit()
在行执行 data.value = res
之前被 returned。所以我想同步这个,期望函数 return 不是 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()
是回调,不会立即执行代码。您的代码并不意味着要从上到下顺序阅读。接下来的执行顺序是
Retrofit2Service.getService().requestUserInfo(name).enqueue
return data
onResponse()
或onFailure()
你不应该 return 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
}
}
})
}