LiveData将null传递给观察者

时间:2018-11-26 23:00:32

标签: kotlin android-room android-livedata

我有以下代码

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正在监听房间实体。

1 个答案:

答案 0 :(得分:1)

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