我試圖將包含其他對象的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被構建,模擬器就會崩潰,並且它會嘗試對它進行包裹。
確實'Subtask'小鬼lement'Serializable'? – EpicPandaForce 2015-04-01 08:32:14
@EpicPandaForce nope,它實現了Parcelable。 – 2015-04-01 08:32:46
嘗試使用'Subtask [] subTasks = myList.toArray(new Subtask [myList.size()]); dest.writeTypedArray(subTasks,flags);'和'readTypedArray' – EpicPandaForce 2015-04-01 08:35:36