【发布时间】:2012-04-09 09:44:43
【问题描述】:
我有以下类,它从/向包裹读取和写入对象数组:
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];
}
};
}
在上面的代码中,我在阅读 readParcelableArray 时得到一个 ClassCastException:
ERROR/AndroidRuntime(5880):原因:java.lang.ClassCastException:[Landroid.os.Parcelable;
上面的代码有什么问题?在编写对象数组时,我应该先将数组转换为ArrayList吗?
更新:
可以将 Object 数组转换为 ArrayList 并将其添加到 parcel 中吗?比如写的时候:
ArrayList<MyClass> tmpArrya = new ArrayList<MyClass>(mObjList.length);
for (int loopIndex=0;loopIndex != mObjList.length;loopIndex++) {
tmpArrya.add(mObjList[loopIndex]);
}
out.writeArray(tmpArrya.toArray());
阅读时:
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);
}
但现在我收到了NullPointerException。上述方法是否正确?为什么会抛出 NPE?
【问题讨论】:
-
mConversationMemberList 的类型是什么?
-
我已经更新了问题,它是 MyClass[] 类型的。
标签: android parcelable