ClassNotFoundException 在从 Android 通过 Intent 反序列化可序列化对象时



我有两个Android应用程序A和B。对于应用 A。我有一个可序列化的对象

public class MyObject implements Serializable {
public String[] var1;
public ArrayList<Integer> var2;
public MyObject (String[] var1, ArrayList<Integer> var2) {
this.var1= var1;
this.var2= var2;
}

然后,我使用

Intent i= new Intent("appB.component");
i.putExtra("myobject", fc);
startActivity(i);

在应用 B 中,我在应用 A 中创建相同的可序列化类。我试图得到这个,但我得到了java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object (name = appA.MyObject )

Bundle b = getIntent().getExtras();               
MyObject o = (MyObject) b.getSerializable("myobject");

我们是否有办法将应用程序 A 中的类引用更改为应用程序 B,或者手动解析此对象,同时不修改应用程序 A 中的代码。

好吧,appA.MyObjectappB.MyObject不是同一个类。 一个不能反序列化为另一个。

最好使用 GSON 或类似的库将appA.MyObject类序列化为 JSON,通过 Intent 发送生成的字符串,然后将 JSON 字符串反序列化回appB.MyObject类。

或者,您可以尝试同时给appA.MyObjectappB.MyObject一个

private static final long serialVersionUID

字段并将两个 UID 设置为相同的值。但我不确定这是否有效。

来自 Android Serializable 文档的建议:

明智地实现可序列化

请参阅Effective Java关于序列化的章节,全面介绍序列化API。本书解释了如何在不损害应用程序可维护性的情况下使用此接口。

推荐的替代品

JSON 简洁、人类可读且高效。Android 包含一个流式处理 API 和一个用于读取和写入 JSON 的树 API。使用绑定库(如 GSON(直接读取和写入 Java 对象。

最新更新