我有一个名为 AllStatStruct 的类。这个类包含三个属性,它们是我的类 StatStructCycle、StatStructHistory 和 MatrixStruct 的对象。每个类都扩展类 DataStruct 并实现 Parcelable 接口。readParceable()
在接口的实现中,每个类都是使用or来读写的writeParceable()
。
在我的 Activity 中,我在 AsyncTask 中调用 SOAP webservice 并获取 class 的对象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
s 解组我的 ArrayList 时,我得到了一个 , 。我注释掉了历史的其他部分。
我尝试使用 and 编写和读取 ArrayList writeTypedList(List<T> list)
,readTypedList(List<T> list, Creator<T> c)
但它也不起作用。
当我使用 ArrayLists 时,我还使用 将它们的容量调整为实际大小trimToSize()
,因为我认为 ArrayList 的“空”插槽可能会导致问题。但同样,情况并非如此......
使用调试器启动应用程序显示,编组StatStructHistory
没有空值......每个属性或列表项都被初始化。我不知道这NullPointerException
是从哪里来的。
最好的问候 htz