Lesen und Schreiben von Arrays von Parcelable-Objekten
Ich habe folgende Klasse, die ein Array von Objekten von / zu einem Paket liest und schreibt:
<code>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]; } }; } </code>
Im obigen Code bekomme ich eineClassCastException
beim lesenreadParcelableArray
:
FEHLER / AndroidRuntime (5880): Auslöser: java.lang.ClassCastException: [Landroid.os.Parcelable;
Was ist im obigen Code falsch? Wenn ich das Objektarray schreibe, sollte ich das Array zuerst in ein konvertierenArrayList
?
AKTUALISIEREN:
Ist es in Ordnung, ein Object-Array in ein zu konvertieren?ArrayList
und zum Paket hinzufügen? Zum Beispiel beim Schreiben:
<code> ArrayList<MyClass> tmpArrya = new ArrayList<MyClass>(mObjList.length); for (int loopIndex=0;loopIndex != mObjList.length;loopIndex++) { tmpArrya.add(mObjList[loopIndex]); } out.writeArray(tmpArrya.toArray()); </code>
Beim Lesen:
<code> 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); } </code>
Aber jetzt bekomme ich eineNullPointerException
. Ist der obige Ansatz richtig? Warum wirft es eine NPE?