我有两个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将此类的实例发送到App B中的另一个活动
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中的代码的情况下以手动方式解析该对象。
答案 0 :(得分:0)
appA.MyObject
和appB.MyObject
不是同一类。
一个不能反序列化为另一个。
最好使用GSON或类似的库将appA.MyObject
类序列化为JSON,通过Intent发送结果字符串,然后将JSON字符串反序列化回appB.MyObject
课。
或者,您可以尝试同时给appA.MyObject
和appB.MyObject
一个
private static final long serialVersionUID
字段,并将两个UID设置为相同的值。但我不确定是否可行。
Android Serializable documentation的忠告:
明智地实现可序列化
有关序列化API的全面介绍,请参见有效Java的序列化一章。本书介绍了如何使用此界面而不损害应用程序的可维护性。
推荐的替代方法
JSON简洁,易读且高效。 Android包含用于读写JSON的流API和树API。使用GSON之类的绑定库直接读写Java对象。