Transformations.map LiveData - PullRequest
       6

Transformations.map LiveData

0 голосов
/ 26 октября 2018

У меня есть следующий код:

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 голосов
/ 26 октября 2018

Вы пропустили нулевую проверку.

res.value.toString() Представьте себе случай, когда res.value равен нулю, вы делаете это.

null.toString(), результатом которого является строка "null"

И с другой стороны, когда вы используете LiveData, правильный подход - наблюдать за всеми изменениями, как предложено zsmb13.

res.observe(this, Observer { name -> textview.text = name })

0 голосов
/ 26 октября 2018

LiveData работает асинхронно. Значение, которое вы для него установили, не сразу доступно в преобразованном LiveData. Вместо того, чтобы пытаться прочитать это значение напрямую, вам нужно observe его изменения, тогда вы получите последние значения:

res.observe(this, Observer { name ->
     textview.text = name
})

(В этом примере кода предполагается, что this - это LifecyleOwner, например AppCompatActivity.)

...