我有一个名为AllStatStruct的类。这个类包含三个属性,它们是我的类StatStructCycle,StatStructHistory和MatrixStruct的对象。每个类都扩展了DataStruct类并实现了Parcelable接口。在接口的实现中,每个类都使用readParceable()
或writeParceable()
来读写。BadParcelableException:解组时发生ClassNotFoundException:(空类名)
在我的Activity中,我调用一个AsyncTask中的SOAP webservice并获得类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,但是给了一个额外的类加载器并使用这个来解开这些可装载的元素是行不通的。
编辑:
如你所说,我试图seperately通过AllStatStruct的几个部分。它与StatStructCycle
和MatrixStruct
正常工作,但与StatStructHistory
,仍然有一个错误抛出。
现在,我得到一个NullPointerException
,当我尝试解包我的ArrayList与StatStructCycle
s。我评论了历史的其他部分。
我试图用writeTypedList(List<T> list)
和readTypedList(List<T> list, Creator<T> c)
写入和读取ArrayList,但它也不起作用。
由于我使用ArrayLists,我还使用trimToSize()
将它们的容量调整为实际大小,因为我认为ArrayList的“空”插槽可能导致问题。但是,情况并非如此...
使用调试器启动应用程序显示编组的StatStructHistory
没有空值...每个属性或listitem都被初始化。我不知道这个NullPointerException
是从哪里来的。
问候 HTZ
我决定不要试图在结果令人困惑的日子之后,再次使用parcelable接口。现在我使用在我的应用程序中定义的全局变量将数据从一个活动传递到另一个活动。 [如何声明一个全局变量?](http://stackoverflow.com/questions/708012/android-how-to-declare-global-variables) – htz