2012-08-25 18 views
26

no pude encontrar ninguna solución para la forma de tratar con el arreglo de enteros en el caso de la parcela (Quiero usar estas dos funciones dest.writeIntArray (StoreID); y in.readIntArray (storeId);).lectura y la escritura matriz entera parcelar

Aquí está mi código

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]; 
     } 
      };  
} 

Respuesta

52

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

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

En lugar de utilizar "readIntArray" Me usaron los siguientes:

storeID = in.createIntArray(); 

Ahora no hay errores.

+0

Gracias. Voy a intentar esto y luego te lo haré saber. –

+1

Gracias. Esto funciona para mi. – anivaler

+3

Gracias. Tenía el mismo problema con readFloatArray (...) y createFloatArray() lo resolvió. – PeterVanPansen

0

Supongo que la clase MyObj implementa Parcelable e implementa todos los métodos necesarios; Sugeriré aquí solo los detalles sobre la lectura/escritura del paquete.

Si 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 lo contrario:

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); 
} 
+0

Causa un bloqueo en los dispositivos Samsung, utilice la respuesta anterior –

Cuestiones relacionadas