Tôi đã theo lớp mà đọc và viết một mảng của các đối tượng từ/đến một bưu kiện:Đọc & viết mảng của Parcelable đối tượng
class ClassABC extends Parcelable {
MyClass[] mObjList;
private void readFromParcel(Parcel in) {
mObjList = (MyClass[]) in.readParcelableArray(
com.myApp.MyClass.class.getClassLoader()));
}
public void writeToParcel(Parcel out, int arg1) {
out.writeParcelableArray(mObjList, 0);
}
private ClassABC(Parcel in) {
readFromParcel(in);
}
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<ClassABC> CREATOR =
new Parcelable.Creator<ClassABC>() {
public ClassABC createFromParcel(Parcel in) {
return new ClassABC(in);
}
public ClassABC[] newArray(int size) {
return new ClassABC[size];
}
};
}
Trong đoạn mã trên tôi nhận được một ClassCastException
khi đọc readParcelableArray
:
ERROR/AndroidRuntime (5880): Gây ra bởi: java.lang.ClassCastException: [Landroid.os.Parcelable;
Điều gì sai ở mã trên? Trong khi viết mảng đối tượng, trước tiên tôi có nên chuyển mảng thành ArrayList
không?
UPDATE:
Is it OK để chuyển đổi một mảng Object để một ArrayList
và thêm nó vào bưu kiện? Ví dụ, khi viết:
ArrayList<MyClass> tmpArrya = new ArrayList<MyClass>(mObjList.length);
for (int loopIndex=0;loopIndex != mObjList.length;loopIndex++) {
tmpArrya.add(mObjList[loopIndex]);
}
out.writeArray(tmpArrya.toArray());
Khi đọc:
final ArrayList<MyClass> tmpList =
in.readArrayList(com.myApp.MyClass.class.getClassLoader());
mObjList= new MyClass[tmpList.size()];
for (int loopIndex=0;loopIndex != tmpList.size();loopIndex++) {
mObjList[loopIndex] = tmpList.get(loopIndex);
}
Nhưng bây giờ tôi nhận được một NullPointerException
. Cách tiếp cận trên có đúng không? Tại sao nó ném một NPE?
Loại mConversationMemberList là gì? – Chetan
Tôi đã cập nhật câu hỏi, nó thuộc loại MyClass []. – User7723337