【发布时间】:2018-10-16 14:36:00
【问题描述】:
我有以下设置:
Kotlin 数据类:
data class Error(val throwable: Throwable, val reloadAction: (() -> Unit)? = null) : Serializable
类的初始化:
val instance = Error(throwable,this::loadData)
其中 this 是 Android 架构组件中的 ViewModel
当我将此数据类传递给 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 there a way to pass a function reference between activities? 是以下答案:
如果它是函数引用 (SomeClass::someFunction) 或 lambda,它实际上是可序列化的。但它可能不是,如果它是功能接口 () -> 单元的一些自定义实现,所以你应该检查它并处理不是的情况。
这是我的情况吗?或者当函数是不可序列化对象(ViewModel)的函数时,不能序列化数据类?是否有任何其他可能性如何在数据类中将函数文字作为 Serializable 传递?
【问题讨论】:
-
我创建了一个包装器 TrackedReference
,它是可打包和可序列化的,无需对底层类型进行封送处理:stackoverflow.com/a/64944753/3405387
标签: android serialization kotlin