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.