Transformations.map LiveData

时间:2018-10-26 19:25:47

标签: android kotlin kotlin-android-extensions

我有以下代码:

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,但是它打印一个空值。我想念什么?

2 个答案:

答案 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
})

(此代码示例假定thisLifecyleOwner,例如AppCompatActivity。)