2012-05-11 54 views
2

我有一個名爲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的幾個部分。它與StatStructCycleMatrixStruct正常工作,但與StatStructHistory,仍然有一個錯誤拋出。

現在,我得到一個NullPointerException,當我嘗試解包我的ArrayList與StatStructCycle s。我評論了歷史的其他部分。

我試圖用writeTypedList(List<T> list)readTypedList(List<T> list, Creator<T> c)寫入和讀取ArrayList,但它也不起作用。

由於我使用ArrayLists,我還使用trimToSize()將它們的容量調整爲實際大小,因爲我認爲ArrayList的「空」插槽可能導致問題。但是,情況並非如此...

使用調試器啓動應用程序顯示編組的StatStructHistory沒有空值...每個屬性或listitem都被初始化。我不知道這個NullPointerException是從哪裏來的。

問候 HTZ

+0

我決定不要試圖在結果令人困惑的日子之後,再次使用parcelable接口。現在我使用在我的應用程序中定義的全局變量將數據從一個活動傳遞到另一個活動。 [如何聲明一個全局變量?](http://stackoverflow.com/questions/708012/android-how-to-declare-global-variables) – htz

回答

0

Problem unmarshalling parcelables

看起來即使你編組是成功的,如果有空例外解組過程仍然會失敗。

出於調試目的,請嘗試逐個編組每個子對象。看看他們中的任何一個是否出錯,然後深入研究這個問題。現在你試圖一次取消3個對象,很難指出哪個對象有問題(如果有的話)。

如果它是不明確的,我建議嘗試此:

bundle.putParcelable("allStatStruct", ass.StatStructCycle); 

如果這樣的作品,嘗試:

bundle.putParcelable("allStatStruct", ass.StatStructHistory); 

等等

相關問題