LiveData передает нулевой наблюдателю - PullRequest
0 голосов
/ 27 ноября 2018

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

myViewModel.catLiveData.observe(this,Observer{
  if(it==null){
      Log.d(TAG,"the object returned is null! How is that possible?")
  }else{ doWork(it) }
})

Как возможно, что я получаю ноль?Я думал, что LiveData не должен передавать null наблюдателю?Кстати, эти LiveData слушают Room Entity.

1 Ответ

0 голосов
/ 27 ноября 2018

LiveData определенно позволяет отправлять наблюдателям null, если они специально отправлены.Вы можете видеть, что сигнатура метода для android.arch.lifecycle.Observer.onChanged явно помечает параметр данных как @Nullable.

Если вы не хотите обрабатывать нулевой тип, вы можете просто использовать оператор ? для его безопасной обработки:

myViewModel.catLiveData.observe(this, Observer { it?.let(::doWork) })

В качестве альтернативы, вы можете создать свой собственный пользовательский Observer, который обрабатывает это для вас, например

class Observer2<T>(private val block: (T) -> Unit) : Observer<T> {
    override fun onChanged(data: T?) {
        data?.let(block)
    }
}

, что позволит вам написать:

myViewModel.catLiveData.observe(this, Observer2(::doWork))
...