如何在视图模型中同步改造?



我正在研究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
}

视图模型:

lateinit var mIndexModel : MutableLiveData<UserModel>
lateinit var mRepository : MainRepository
fun init(name:String){
mRepository =  MainRepository().getInstance()
mIndexModel = mRepository.getIndexRetrofit(name)
//Log.d("TAG",mIndexModel.value.toString())
}
fun getIndexList(): MutableLiveData<UserModel> {
return mIndexModel
}

OnCreate:

mainViewModel= ViewModelProviders.of(this).get(MainViewModel::class.java)
mainViewModel.init("ckdrb7017")
mainViewModel.getIndexList().observe(this, Observer<UserModel>(){
t->
if(t==null){
Log.d("TAG","NULL");
}else{
Log.d("TAG","SUCCESS");
binding.user=t
}
})
binding.url.setOnClickListener(View.OnClickListener {
var intent = Intent(this, SecondActivity::class.java)
intent.putExtra("userId", binding.user!!.login)
startActivity(intent)
})

分配用户后尝试使用binding.executePendingBindings()

binding.user=t
binding.executePendingBindings()

但好的做法是在Activity/Fragment中使用另一个变量来保存UserModel并在intent中使用该变量

private userModel: UserModel? = null
...
userModel = t
binding.user=t
binding.executePendingBindings()

然后

var intent = Intent(this, SecondActivity::class.java)
intent.putExtra("userId", userModel?.login)
startActivity(intent)

相关内容

  • 没有找到相关文章

最新更新