ViewModel с SavedStateHandle - исключение при десериализации LiveData с настраиваемым классом данных - PullRequest
2 голосов
/ 27 мая 2020

У меня есть простой ViewModel, который получает SavedStateHandle. Этот ViewModel имеет одиночный LiveData, который содержит MyViewState<List<MyDataClass>>, что выглядит следующим образом:

sealed class MyViewState<T> : Parcelable {
    @Parcelize data class ErrorState<T>(val error: @RawValue Any?): MyViewState<T>()
    @Parcelize data class SuccessState<T>(val data: @RawValue T): MyViewState<T>()
}

и

@Parcelize data class MyDataClass(val data: String): Parcelable

LiveData в ViewModel извлекается вот так:

class MyViewModel(
    private val handle: SavedStateHandle
): ViewModel() {

    var myLiveData = handle.getLiveData<MyViewState<List<MyDataClass>>>("myLiveData")
    ...
}

И отлично работает. Однако, как только приложение будет убито, и я вернусь к нему, приложение выйдет из строя с этим исключением:

E/Parcel: Class not found when unmarshalling: com.myapp.models.MyDataClass
java.lang.ClassNotFoundException: com.myapp.models.MyDataClass
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:453)
        at android.os.Parcel.readParcelableCreator(Parcel.java:2811)
        at android.os.Parcel.readParcelable(Parcel.java:2765)
        at android.os.Parcel.readValue(Parcel.java:2668)
        at android.os.Parcel.readListInternal(Parcel.java:3098)
        at android.os.Parcel.readArrayList(Parcel.java:2319)
        at android.os.Parcel.readValue(Parcel.java:2689)
        at com.myapp.core.MyViewState$Success$Creator.createFromParcel(Unknown Source:13)
        ...

... и я не могу понять, почему это sh произошло и как это сделать. реши.

Есть идеи?

...