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

} 

每當我要檢索我的下列數組中的字節時,它將返回NullPointerException的異常。任何人都可以說出什麼問題?我試圖做的是將一個下載的圖像字節從一個活動轉移到另一個活動。通過Parcel傳輸ByteArray返回NullPointerException

回答

62

讀取包裹時永遠不會初始化_byte數組,因此它爲空。

我會做的是,當你寫你的包裹時,存儲字節數組的長度,然後是實際的字節數組。讀取包裹時,首先讀取長度並將_byte數組初始化爲一個新大小的數組,然後讀取字節數組。


代碼從評論

在寫感動...

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

和讀...

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

你的意思是這樣的:(在包裹) 公共無效readFromParcel { _byte =新的字節[length_of_byte]; in.readByteArray(_byte); } – Debopam 2012-07-29 13:21:28

+2

在write ...'dest.writeInt(_byte.length); dest.writeByteArray(_byte);'和read ...'_byte = new byte [in.readInt()]; in.readByteArray(_byte);' – 2012-07-29 13:25:00

+0

確定..讓我查一下.. – Debopam 2012-07-29 13:26:56

7

而不存儲字節數組長度較短的溶液:

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