实时数据:候选分辨率将很快发生变化

Vah*_*yan 73 android kotlin android-livedata

在相同的情况下,当我调用对象的observe方法时,Android Studio 会显示警告消息LiveData

viewModel.emailValidationResult.observe(viewLifecycleOwner, {onEmailChanged(it)})
Run Code Online (Sandbox Code Playgroud)

候选解析将很快更改,请使用完全限定名称明确调用以下更接近的候选:

public open fun observe(owner: LifecycleOwner,observer: Observer<in Int?>): androidx.lifecycle.LiveData中定义的单元

据我了解,这是在更新 kotlin 1.4 之后发生的, 这实际上是什么意思?

hra*_*ach 115

这意味着不再需要 androidx 中的扩展。

只需删除它的 import import androidx.lifecycle.observe

实际上将在 androidx 中被弃用。在那里阅读更多推理。

编辑:

请注意 Erik Hoogendoorn 的“问题”

此更改导致来自观察到的 LiveData 对象的值被解释为可为空(因为转换后的 lambda 语法基于可为空的 Java 代码)。Kotlin 扩展不是这种情况,会导致用户的功能损失。在我看来,应该恢复这种更改并找到不同的解决方案。

我很好奇他们是否会重命名并保留助手或提出其他解决方案。

  • 在 Kotlin 1.4 能够对此方法的回调参数进行正确的 SAM 转换之前,助手 livedata-ktx 仅作为拐杖存在。没有功能损失,因为观察到的值实际上不可为空,它们是“平台类型”,这意味着您可以忽略 kotlin 中为 null 的可能性,除非您需要处理它。kotlin 扩展的可空性问题是因为它实际上是用 kotlin 编写的,并且错误地分配了非空类型。我对此感到有点难过,因为添加它是为了修复我报告的错误 https://issuetracker.google.com/issues/111179594 (2认同)

Bol*_*ose 13

Androidx 扩展已弃用,因此我们必须使用原始扩展。

删除“导入 androidx.lifecycle.observe”

然后

 viewModel.liveData.observe(viewLifecycleOwner, Observer { result ->

 })
 /*
 viewModel.liveData.observe(viewLifecycleOwner) { result ->
            
 }
 */
Run Code Online (Sandbox Code Playgroud)