2011-06-12 65 views
0

我在跨Intent解析一個Parcelable時遇到問題。解組一個Parcelable時發生ClassNotFoundException

我創建使用

Intent data = new Intent(); 
data.putExtra(ShoppingListAdapter.parcelName, la); 
setResult(Activity.RESULT_OK, data); 

parcelable我收到它在onActivityResult:

Parcelable myData = data.getParcelableExtra(ShoppingListAdapter.parcelName); 

然後用它傳遞到另一個活動:

Intent myIntent = new Intent(this,Class.class); 
myIntent.putExtra("myData", myData); 
startActivityForResult(myIntent, RESULT); 

我Parcelable有另一個Parcelable內我寫和讀uisng:

list = in.readParcelable(null); 

我一直在使用不同的類加載器,從ClassLoader.getSystemLoader()來MyClass.class.getClassLoader(),但我仍然得到一個運行時異常嘗試:

06-12 21:13:04.940: ERROR/AndroidRuntime(29962): Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: 

是我的包裹在此之前某處損壞還是我讀錯了?

Alex

+2

你想傳遞一個ListAdapter執行回的結果呢? (變量名'la'對我來說看起來很可疑:)) – 2011-06-12 20:42:40

+0

嗯,是的,沒有。我傳遞適配器中保存的數據。所以它會將各種數據中的各種數據放平。它適用於配置更改,其中我完全一樣但是將其保存到savedInstance而不是Intent中。那是問題嗎?我以爲我只是把它裏面的數據弄平了。 – Alex 2011-06-13 10:33:09

回答

0

正如指出的那樣,這是一種不正確的使用方法。所以儘管我還沒有解決,但還有更好的方法來做同樣的事情。因此,考慮它,而不是

How to declare global variables in Android?

雖然如果任何人有答案原來的問題,請張貼任何想法。可能發生在別的地方。

亞歷

+0

這是發生在我的代碼..一切看起來不錯,但在回讀時崩潰... – Ronnie 2012-09-18 07:25:22

1

我也有這個問題,這是一件愚蠢的事情。 writeToParcel和readToParcel上方法的順序和編號應該是相同的並且具有相同的變量。

我的意思是:

public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(title); 
    dest.writeParcelable((Parcelable)this.getLocation(), flags); 
    dest.writeString(value); 
} 

必須以相同的順序爲:

private void readFromParcel(Parcel in){ 

    this.setTitle(in.readString()); 
    this.setLocation((Location)in.readParcelable(android.location.Location.class.getClassLoader())); 
    this.setValue(in.readString()); 
} 
+0

謝謝,我正要生氣。 – Lazy 2015-09-02 08:54:32

相關問題