20
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. 任何人都可以说是什么问题吗?我想要做的是将下载的图像字节从一个活动传输到另一个活动。

4

2 回答 2

67

您永远不会在读取包裹时初始化 _byte 数组,因此它为空。

我要做的是,当你写你的包裹时,存储字节数组的长度,然后是实际的字节数组。当您读取包裹时,首先读取长度并将您的 _byte 数组初始化为该大小的新数组,然后读取字节数组。


代码从评论中移出

在写...

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

并在阅读中...

_byte = new byte[in.readInt()]; 
in.readByteArray(_byte);
于 2012-07-29T13:11:16.140 回答
18

不存储字节数组长度的更短的解决方案:

dest.writeByteArray(byteArray);
byteArray = in.createByteArray();
于 2016-12-07T13:40:43.053 回答