【问题标题】:ObservableField return null after update to 3.1.0ObservableField 更新到 3.1.0 后返回 null
【发布时间】:2018-03-27 15:35:06
【问题描述】:

在将Android Studio 更新为3.1.0kotlin 版本更新为1.2.31 后,我遇到了Observables 的问题。

someVm 值为空。

class ViewModel1(car: Car) : BaseObservable() {

    val someVm = ObservableField<ViewModel2>(ViewModel2(car))

    shipmentVm.get()!!
}

class ViewModel2(car: Car) : ItemViewModel() {

    val car= ObservableField(car)
}

open class ItemViewModel : BaseObservable() {

    val first = ObservableField(false)
    val last = ObservableField(false)
}

非常感谢!

【问题讨论】:

  • 对我来说同样的问题......很奇怪,即使你不指定可空,它现在也返回可空...... DataBindingUtil.bind 现在也返回可空绑定
  • 因为 @Nullable 在原始源代码中的 get() 之上。现在有同样的问题:(

标签: android data-binding kotlin observable


【解决方案1】:

我通过继承 ObservableField 解决了这个问题。 FWIW,它不是有效的 liskov,因为它加强了先决条件,但现在可以正常工作。

如果您从 java 中使用 Null,仍然可以潜入此类(并导致 NPE)。

import android.databinding.Observable
import android.databinding.ObservableField

class NonNullObservableField<T : Any>(
    value: T, vararg dependencies: Observable
) : ObservableField<T>(*dependencies) {
    init {
        set(value)
    }

    override fun get(): T = super.get()!!

    @Suppress("RedundantOverride") // Only allow non-null `value`.
    override fun set(value: T) = super.set(value)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多