gpt4 book ai didi

android - 如何在 View 模型中同步改造?

转载 作者:行者123 更新时间:2023-11-30 04:54:09 24 4
gpt4 key购买 nike

我正在研究 mvvm。当我调用 init() 时,第一个调用为空。使用改造,我认为原因是函数 getIndexRetrofit() 在行执行 data.value = res 之前返回。所以我想同步这个,期望函数返回的不是空值而是响应值。当我单击按钮时,值 'binding.user!!.login' 为空。

存储库:

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
}

View 模型:

    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
}

创建时:

 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)

关于android - 如何在 View 模型中同步改造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59508070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com