A class implements Parcelable {
private B dataB;
private ArrayList
private ArrayList
// 其他省略...
// region Parcelable
private A(Parcel parcel) {
try {
dataB= parcel.readParcelable(B.class.getClassLoader());
myList1= parcel.readArrayList(String.class.getClassLoader());
myList2= parcel.readArrayList(C.class.getClassLoader());
} catch (Exception e) {
Log.e("parcelable error", "A class:" + e.toString());
}
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public A createFromParcel(Parcel parcel) {
return new A(parcel);
}
public A[] newArray(int size) {
return new A[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeParcelable(dataB, i);
parcel.writeList(myList1);
parcel.writeList(myList2);
}
// endregion
}
B class implements Parcelable {
private String id;
private String name;
// 其他省略...
}
C class implements Parcelable {
private String gender;
private String age;
// 其他省略...
}
但最近用一樣的寫法,在A class中實作Parcel的時候,write部分沒問題,read部分卻crash並出現錯誤java.lang.RuntimeException: Parcel android.os.Parcel@ffd1087: Unmarshalling unknown type code 7667825 at offset 1152
檢查了三款自訂的Parcel Class A、B、C都有確實實作相關methods,後來看到此篇文章Parcel Unmarshalling unknown type code提到資料的讀寫要按照相同順序,回頭檢查欄位高達四十個的B class才發現順序正確,但是write部分寫了三十六個欄位,read部分卻讀取了三十七個欄位,也因此影響了Parcel A的讀取部分@@
特此紀錄一下,在使用Parcel時要特別注意資料的讀寫順序與個數!!!