ObservableField returns null after upgrade to 3.1.0

After upgrading to Android Studiobefore 3.1.0and kotlinthe version before 1.2.31I had a problem with Observables.

The value of someVm is null.

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)
}

Many thanks!

+4
source share
1 answer

I solved this by subclassing the ObservableField. FWIW, this is not a valid Liskov, because it strengthens the prerequisites, but at the moment it works perfectly.

Nulls can still break into this class (and lead to NPE) if you use it from java.

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)
}
0
source

Source: https://habr.com/ru/post/1695424/


All Articles