2012-07-29 12 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]; 
     } 
    }; 

} 

Ilekroć mam zamiar pobrać bajty w poniższej tablicy, zwrócony wyjątek to NullPointerException. Czy ktoś może powiedzieć, jaki jest problem? Próbuję przesłać pobrane bajty obrazu z jednej czynności do drugiej.Przenoszenie ByteArray przez Zwrot paczki NullPointerException

Odpowiedz

62

Nigdy nie inicjalizujesz tablicy _ po odczytaniu przesyłki, dlatego jest ona zerowa.

Po zrobieniu paczki, przechowuję długość tablicy bajtów, a następnie faktyczną tablicę bajtów. Kiedy czytasz paczkę, najpierw przeczytaj długość i zainicjuj tablicę _byte do nowej tablicy o tym rozmiarze, a następnie przeczytaj w tablicy bajtów.


Kod przeniesiony z komentarzem

W zapisie ...

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

i czytać ...

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

masz na myśli coś takiego: public void readFromParcel (paczkę w) { _byte = new byte [length_of_byte]; in.readByteArray (_byte); } – Debopam

+2

Wpisać ... 'dest.writeInt (_byte.length); dest.writeByteArray (_byte); 'and in read ...' _byte = new byte [in.readInt()]; in.readByteArray (_byte); ' –

+0

ok .. pozwól mi sprawdzić .. – Debopam

7

Krótszy rozwiązanie bez zapisywania długości tablicami bajtów:

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