如何与 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()是回调,不会立即执行代码。您的代码并不意味着要从上到下顺序阅读。接下来的执行顺序是

  1. Retrofit2Service.getService().requestUserInfo(name).enqueue
  2. return data
  3. 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
            }
        }
    })
}