我有以下代码:
val liveData = MutableLiveData<String>()
liveData.value = "Ali"
val res = map(liveData) { post(it) }
textview.text = res.value.toString()
fun post(name: String): String {
return "$name $name"
}
我希望它打印Ali Ali
,但是它打印一个空值。我想念什么?
答案 0 :(得分:1)
您缺少空检查。
res.value.toString()
想象一下,当res.value为null时,您正在这样做。
null.toString()
,其结果是字符串“ null”
另一方面,当您使用LiveData时,正确的方法是观察所有建议的zsmb13更改。
res.observe(this, Observer { name ->
textview.text = name
})
答案 1 :(得分:0)
LiveData
异步工作。您为它设置的值在转换后的LiveData
中不会立即可用。与其尝试直接读取该值,不如observe
对其进行更改,那么您将获得最新的值:
res.observe(this, Observer { name ->
textview.text = name
})
(此代码示例假定this
是LifecyleOwner
,例如AppCompatActivity
。)