我有以下代码
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正在监听房间实体。
答案 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))