kotlin - LiveData 将 null 传递给观察者
问题描述
我有以下代码
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))
推荐阅读
- python-3.x - 更改 bincopy 段的地址
- python - 使用 Python Rewrite 从 Discord 下载 PNG/GIF/MP3 文件
- python - Python 自动下载 (ufile.io)
- python - 当它们之间没有间隙时加入字符串变量的分割线
- graph - plantuml - 更好地配置箭头和文本
- python - 将字符串拆分两次
- json - 如何读取静态 json 并在 Angular 中填充评论部分?
- python - 如何将特定的 SQL 语句实现为 SQLAlchemy ORM 查询
- typescript - 错误:“必须在 href 中定义路由器”stenciljs router-v2 测试
- c++ - COM - C++ 调用函数返回 DISP_E_TYPEMISMATCH