我有一個名爲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