我有以下设置:
Kotlin数据类:
data class Error(val throwable: Throwable, val reloadAction: (() -> Unit)? = null) : Serializable
类的初始化:
val instance = Error(throwable,this::loadData)
其中this
是Android体系结构组件中的ViewModel
当我将此数据类传递给可打包时:
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,它将实际上是可序列化的。但是,如果它是功能接口()-> Unit的某种自定义实现,则可能不是,所以您应该检查一下并处理不存在的情况。
这是我的情况吗?还是当函数是不可序列化对象(ViewModel)的函数时,数据类无法序列化?还有其他可能性如何在数据类内部将函数文字传递为Serializable吗?
答案 0 :(得分:3)
问题出在视图模型上:com.mypackagename.ExampleViewModel
。此类不可序列化。
如果使用函数引用,则目标对象(在这种情况下为视图模型)也必须可序列化。
答案 1 :(得分:0)
我有类似的问题,我的问题是我不希望默认情况下数据类不能序列化。重要的是不要忘记实现Serializable
接口。