我有一个叫AllStatStruct的类。这个类包含三个属性,它们是我的类StatStructCycle、StatStructHistory和MatrixStruct的对象。每个类都扩展了类DataStruct并实现了Parcelable接口。在接口的实现中,每个类都是使用readParceable()或writeParceable()读写的。
在我的活动中,我在AsyncTask中调用SOAP并获取类AllStatStruct的一个对象。通过创建一个Bundle将此对象传递给下一个活动。
protected void onPostExecute(final AllStatStruct ass) {
if (ass != null) {
if (dialog.isShowing()) {
dialog.dismiss();
}
Bundle bundle = new Bundle();
bundle.putParcelable("allStatStruct", ass);
intent = new Intent(packageContext, PrivateView.class);
intent.putExtras(bundle);
startActivity(intent);
} else {
KreativBarometerMainView.this.showDialog(9999);
}
}编组包裹运行良好,我可以在LogCat中看到我的跟踪输出。但是当解编组包裹时,会出现一个ClassNotFoundException,我不知道为什么。这是痕迹:
05-11 15:02:59.796: E/AndroidRuntime(8647): Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling:
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Parcel.readParcelable(Parcel.java:1958)
05-11 15:02:59.796: E/AndroidRuntime(8647): at de.kreativBarometer.net.structs.AllStatStruct.<init>(AllStatStruct.java:45)
05-11 15:02:59.796: E/AndroidRuntime(8647): at de.kreativBarometer.net.structs.AllStatStruct$1.createFromParcel(AllStatStruct.java:70)
05-11 15:02:59.796: E/AndroidRuntime(8647): at de.kreativBarometer.net.structs.AllStatStruct$1.createFromParcel(AllStatStruct.java:1)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Parcel.readParcelable(Parcel.java:1981)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Parcel.readValue(Parcel.java:1846)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Parcel.readMapInternal(Parcel.java:2083)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Bundle.unparcel(Bundle.java:208)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Bundle.getParcelable(Bundle.java:1100)
05-11 15:02:59.796: E/AndroidRuntime(8647): at de.kreativBarometer.ui.PrivateView.onCreate(PrivateView.java:693)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1628)
05-11 15:02:59.796: E/AndroidRuntime(8647): ... 11 more如您所见,没有为未找到的类命名!因此,它正在搜索一个名为"“的类,当然没有找到它。
我不知道为什么会发生这种事。有人能帮我吗?我已经试过使用ClassLoader了,但是给这个意图一个额外的类加载器,并使用这个类加载器来解开parcelables是行不通的。
编辑:
正如您所建议的,我试图分别传递AllStatStruct的几个部分。它在StatStructCycle和MatrixStruct中工作得很好,但是对于StatStructHistory,仍然有一个错误抛出。
现在,我得到了一个NullPointerException,当我试图解开带有StatStructCycle的ArrayList时。我评论了历史的其他部分。
我试着用writeTypedList(List<T> list)和readTypedList(List<T> list, Creator<T> c)来编写和阅读writeTypedList(List<T> list),但是它也不起作用。
在使用ArrayLists时,我还通过使用trimToSize()将它们的容量缩小到它们的实际大小,因为我认为ArrayList的“空”槽可能会导致问题。但事实并非如此..。
使用调试器启动应用程序显示,封送的StatStructHistory没有空值.每个属性或listitem都被初始化。我不知道这个NullPointerException是从哪里来的。
向赫兹问好
发布于 2012-05-11 13:48:42
Problem unmarshalling parcelables
看起来,即使您的编组成功,如果存在空异常,unmarshall进程仍然会失败。
为了调试目的,试着逐个编组每个子对象。看看他们中是否有任何一个出错了,然后深入研究问题。现在,您正在尝试同时解开所有3个对象,很难确定哪个对象有问题(如果有的话)。
如果还不清楚,我建议你试一试:
bundle.putParcelable("allStatStruct", ass.StatStructCycle); 如果这有效,请尝试:
bundle.putParcelable("allStatStruct", ass.StatStructHistory); 等等。
https://stackoverflow.com/questions/10552062
复制相似问题