android - 在应用程序之间传递序列化对象
问题描述
我正在尝试使用 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
解决方案
这是因为两种情况下的 serialVersionUID 不同,序列化和反序列化类中的序列化工作应该相同。将此行放在您的两个班级中
public static final long serialVersionUID = 42L;
推荐阅读
- dart - 我怎样才能让 BottomNavigationBar 粘在键盘颤动的顶部
- winapi - 是否可以按 FIFO 顺序将自定义消息放入 win32 消息队列中?
- python - 在 TensorFlow 对象检测 API 中获取类和概率
- c++ - 用于双链接结构的c ++堆排序
- javascript - 如何将 chai-as-promised 与 Typescript 一起使用?
- excel - Excel 数据透视表 - 如何排列字段以对字段求和,同时忽略来自另一个不相关字段的重复行
- json - 在 QJSonArray 中搜索项目
- javascript - 将 SnapshotChanges 与 CombineLatest 一起使用
- java - Java 无法推断“类”<> 的类型参数
- php - PHP 中的 iCloud Web 服务服务器到服务器身份验证