У меня есть следующие настройки:
Класс данных Kotlin:
data class Error(val throwable: Throwable, val reloadAction: (() -> Unit)? = null) : Serializable
Инициализация класса:
val instance = Error(throwable,this::loadData)
Где this
равно ViewModel
от AndroidКомпоненты архитектуры
Когда я передаю этот класс данных в parcelable:
parcel.writeSerializable(instance as Serializable)
Я получаю следующее исключение:
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.mypackagename.Error)
at android.os.Parcel.writeSerializable(Parcel.java:1468)
at com.mypackagename.CustomView$Companion$SavedState.writeToParcel(CustomView.kt:177)
...
Caused by: java.io.NotSerializableException: com.mypackagename.ExampleViewModel
В этом вопросе: IsЕсть ли способ передать ссылку на функцию между действиями? - это следующий ответ:
На самом деле он будет сериализуемым, если это ссылка на функцию (SomeClass :: someFunction) или лямбда-выражение.Но это может быть не так, если это какая-то пользовательская реализация функционального интерфейса () -> Unit, поэтому вы должны проверить это и обработать случаи, когда это не так.
Это мой случай?Или класс данных не может быть сериализован, когда функция является функцией не сериализуемого объекта (ViewModel)?Существуют ли другие способы передачи литерала функции как Serializable внутри класса данных?