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))
我有以下代码
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))