2012-07-29 23 views
17
import android.os.Parcel; 
import android.os.Parcelable; 

public class MClass implements Parcelable { 
    private byte[] _byte; 

    public MClass() { 
    } 

    public MClass(Parcel in) { 
     readFromParcel(in); 
    } 


    public byte[] get_byte() { 
     return _byte; 
    } 

    public void set_byte(byte[] _byte) { 
     this._byte = _byte; 
    } 

    public int describeContents() { 
     return 0; 
    } 

    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeByteArray(_byte); 
    } 

    public void readFromParcel(Parcel in) { 
     in.readByteArray(_byte); //LOE - Line Of Exception 
    } 

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 
     public MClass createFromParcel(Parcel in) { 
      return new MClass(in); 
     } 

     public MClass[] newArray(int size) { 
      return new MClass[size]; 
     } 
    }; 

} 

Cada vez que voy a recuperar los bytes en mi siguiente matriz se está volviendo excepción de NullPointerException. ¿Alguien puede decir cuál es el problema? Lo que trato de hacer es transferir una imagen descargada de una actividad a otra.Transferencia ByteArray través de paquete vuelve NullPointerException

Respuesta

62

Nunca inicializa la matriz _byte al leer el paquete, por lo tanto, es nulo.

Lo que haría es, cuando escriba su paquete, almacenar la longitud de la matriz de bytes seguida de la matriz de bytes real. Cuando lea el paquete, primero lea la longitud e inicialice su matriz de bytes en una nueva matriz de ese tamaño, luego lea en la matriz de bytes.


Código trasladó desde comentario

En escritura ...

dest.writeInt(_byte.length); 
dest.writeByteArray(_byte); 

y en lectura ...

_byte = new byte[in.readInt()]; 
in.readByteArray(_byte); 
+0

Qué quiere decir algo así como: public void readFromParcel (paquete de) { _byte = new byte [length_of_byte]; in.readByteArray (_byte); } – Debopam

+2

En escritura ... 'dest.writeInt (_byte.length); dest.writeByteArray (_byte); 'y en lectura ...' _byte = new byte [in.readInt()]; in.readByteArray (_byte); ' –

+0

ok ... déjame comprobar ... – Debopam

7

Una solución más corto sin almacenar la longitud de las matrices de bytes:

dest.writeByteArray(byteArray); 
byteArray = in.createByteArray();