LiveData 将 null 传递给观察者

LiveData is passing null to observer

我有以下代码

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。

LiveData 绝对允许 null 发送给观察员,如果它是专门张贴的。您可以看到 android.arch.lifecycle.Observer.onChanged 的方法签名明确地将数据参数标记为 @Nullable

如果您不想处理 null 类型,您可以简单地使用 ? 运算符来安全地处理它:

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))