【发布时间】:2020-09-07 15:25:48
【问题描述】:
登录成功后我会显示用户名。
private fun getInfo(context: Context, userkey: String){
binding!!.initVm!!.username = "Hello, boo1"
ServiceGenerator
.createService(Service::class.java)!!
.getUserInfo(userkey)
.enqueue(object : Callback<UserInfo> {
override fun onFailure(call: Call<UserInfo>, t: Throwable) {
binding!!.initVm!!.username = "Hello, boo5"
}
override fun onResponse(call: Call<UserInfo>, response: Response<UserInfo>) {
val result = response.body()!!
if (response.isSuccessful){
Log.d("test", "Hello, ${response.body()!!.username}")
binding!!.initVm!!.username = "Hello, boo2"
}else{
binding!!.initVm!!.username = "Hello, boo3"
}
}
})
}
<TextView
android:id="@+id/tv_greeting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="@{initVm.username}"
android:visibility="@{initVm.greetingVisibility}"
android:textStyle="bold"/>
即使网络通信成功,也不绑定数据。所以,它显示“你好,boo1”。这很奇怪。会因为 Asyc 而发生吗?我该如何解决这个问题?
我可以通过访问 View 来插入文本。但我不想这样做,我想使用绑定。
class InitViewModel(handler: InitHandler) : ViewModel() {
var handler = handler
var greetingVisibility = View.VISIBLE
var logInVisibility = View.VISIBLE
var username = "Hello, N/A"
// ... methods
}
【问题讨论】:
-
这是什么initVm
-
@AbrahamMathew 已更新。我认为这没关系,因为
Hello, boo1工作正常。 -
您正在调用 getInfo() 并且您的值已更新为 Hello, boo1,但您没有遇到成功或失败。如果成功,那么它会改变
-
这种方法也不好。您可以在 viewmodel livedata 变量中设置从 api 获取的详细信息,并可以轻松地在片段/活动中显示它
标签: android data-binding android-mvvm