studio putparcelable online intent describecontents android parcelable

android - putparcelable - Lectura y escritura de matriz de enteros a parcela



putparcelable android (2)

Asumo que la clase MyObj implementa Parcelable e implementa todos los métodos requeridos; Voy a sugerir aquí sólo los detalles sobre la lectura / escritura de paquetes.

Si el tamaño de la matriz se conoce de antemano:

public void writeToParcel(Parcel out, int flags) { super.writeToParcel(out, flags); out.writeIntArray(mMyIntArray); // In this example array length is 4 } protected MyObj(Parcel in) { super(in); mMyIntArray = new int[4]; in.readIntArray(mMyIntArray); }

De otra manera:

public void writeToParcel(Parcel out, int flags) { super.writeToParcel(out, flags); out.writeInt(mMyArray.length); // First write array length out.writeIntArray(mMyIntArray); // Then array content } protected MyObj(Parcel in) { super(in); mMyIntArray = new int[in.readInt()]; in.readIntArray(mMyIntArray); }

No pude encontrar ninguna solución sobre cómo tratar con una matriz entera en caso de parcela (quiero usar estas dos funciones dest.writeIntArray (storeId) e in.readIntArray (storeId); ).

Aqui esta mi codigo

public class ResponseWholeAppData implements Parcelable { private int storeId[]; public int[] getStoreId() { return storeId; } public void setStoreId(int[] storeId) { this.storeId = storeId; } @Override public int describeContents() { return 0; } public ResponseWholeAppData(){ storeId = new int[2]; storeId[0] = 5; storeId[1] = 10; } public ResponseWholeAppData(Parcel in) { if(in.readByte() == (byte)1) in.readIntArray(storeId); //how to do this storeId=in.readIntArray(); ? } } @Override public void writeToParcel(Parcel dest, int flags) { if(storeId!=null&&storeId.length>0) { dest.writeByte((byte)1); dest.writeIntArray(storeId); } else dest.writeByte((byte)0); } public static Parcelable.Creator<ResponseWholeAppData> getCreator() { return CREATOR; } public static void setCreator(Parcelable.Creator<ResponseWholeAppData> creator) { CREATOR = creator; } public static Parcelable.Creator<ResponseWholeAppData> CREATOR = new Parcelable.Creator<ResponseWholeAppData>() { public ResponseWholeAppData createFromParcel(Parcel in) { return new ResponseWholeAppData(in); } public ResponseWholeAppData[] newArray(int size) { return new ResponseWholeAppData[size]; } }; }


Cuando uso " in.readIntArray(storeID) ", in.readIntArray(storeID) un error:

"Causado por: java.lang.NullPointerException en android.os.Parcel.readIntArray (Parcel.java:672)" .

En lugar de usar " readIntArray " usé lo siguiente:

storeID = in.createIntArray();

Ahora no hay errores.