Android Studio更新为3.1.0并将kotlin版本更新为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)
}

非常感谢你!

最佳答案

我通过子类化ObservableField解决了这个问题。 FWIW,这不是有效的liskov,因为它增强了先决条件,但目前效果很好。

如果从Java使用Null,则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)
}

关于android - 更新至3.1.0后,ObservableField返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49517029/

10-10 22:39