2015-04-01 54 views
1

我試圖將包含其他對象的ArrayList的一個對象傳送給Android中的另一個Activity。這個想法是將它們添加到一個ArrayList中並顯示它們,以便可以執行有問題的任務。用intent.addExtra的NotSerializable異常(parcelable Object)

Task ta = new Task(n, o, t, v, subList); 

    Intent i = new Intent(this, ActivityList.class); 
    i.putExtra("task", ta); 
    startActivity(i); 

這是意圖。 Task是Parcelable,而SubList是類Subtask的ArrayList,它也是Parcelable。 當然,由於ArrayList總是實現Serializable,Parcelling它們不應該是一個問題?構造函數的參數是:String,byte,byte,byte,ArrayList。這些字節將被用作布爾值。

這裏是任務的包裹代碼,如果你需要它:

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(taskName); 
    dest.writeByte((byte) (soundCueOne ? 1 : 0)); 
    dest.writeByte((byte) (soundCueTwo ? 1 : 0)); 
    dest.writeByte((byte) (vibrCue ? 1 : 0)); 
    dest.writeSerializable(myList); 
} 

private Task(Parcel in) { 
    this.taskName = in.readString(); 
    this.soundCueOne = in.readByte() != 0; 
    this.soundCueTwo = in.readByte() != 0; 
    this.vibrCue = in.readByte() != 0; 
    this.myList = (ArrayList<Subtask>) in.readSerializable(); 
} 

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 
    public Task createFromParcel(Parcel in) { 
     return new Task(in); 
    } 

    public Task[] newArray(int size) { 
     return new Task[size]; 
    } 
}; 

有人能看到什麼是錯的代碼?這顯然是某處,甚至可能是在Subtask類中,因爲一旦Task被構建,模擬器就會崩潰,並且它會嘗試對它進行包裹。

+0

確實'Subtask'小鬼lement'Serializable'? – EpicPandaForce 2015-04-01 08:32:14

+0

@EpicPandaForce nope,它實現了Parcelable。 – 2015-04-01 08:32:46

+0

嘗試使用'Subtask [] subTasks = myList.toArray(new Subtask [myList.size()]); dest.writeTypedArray(subTasks,flags);'和'readTypedArray' – EpicPandaForce 2015-04-01 08:35:36

回答

1

如果我看得很清楚,那麼問題在於您試圖使用ArrayList<T>作爲Serializable,即使它不是Serializable - 它是一個Parcelable。

因此,更換

dest.writeSerializable(myList); 

dest.writeTypedList(myList); 

和替換

this.myList = (ArrayList<Subtask>) in.readSerializable(); 

this.myList = in.readTypedList(new ArrayList<Subtask>(), Subtask.CREATOR); 
+1

完美的男人,感謝您的幫助! – 2015-04-01 09:08:12

+0

不客氣! :d – EpicPandaForce 2015-04-01 09:09:24

相關問題