首页 > 解决方案 > 在应用程序之间传递序列化对象

问题描述

我正在尝试使用 Bundle 在应用程序之间传递序列化对象,其中在一个应用程序中,该对象位于 Java 中,而在另一个应用程序中,同一对象位于 Kotlin 中。

传递一个对象 -

   Bundle bundle = new Bundle();  
    bundle.putSerializable(Constants.KEY_USER_PROFILE, getUserProfile());

获取对象 -

 Profile profile = (Profile) bundle.getSerializable(Constants.KEY_USER_PROFILE);

在第二种情况下,profile 类是 kotlin 语言,而第一种是 java

传递对象时出现以下异常

java.lang.RuntimeException:无法启动活动 ComponentInfo{MainActivity}:java.lang.RuntimeException:Parcelable 遇到 IOException 读取 Serializable 对象(名称 = base.model.user.Profile)
原因:java.lang.RuntimeException:遇到Parcelable IOException 读取 Serializable 对象(名称 = base.model.user.Profile)

                                                                           Caused by: java.io.InvalidClassException: base.model.user.Profile; local class incompatible: stream classdesc serialVersionUID = 7285398503547917474, local class serialVersionUID = -1011142074531890510

标签: androidserializationkotlin

解决方案


这是因为两种情况下的 serialVersionUID 不同,序列化和反序列化类中的序列化工作应该相同。将此行放在您的两个班级中

public static final long serialVersionUID = 42L;

推荐阅读