通过包裹传送的ByteArray返回NullPointerException异常(Transferr

2019-06-26 14:21发布

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 。 任何一个可以说的是什么问题? 我所试图做的是从一个活动转移下载的图像字节到另一个。

Answer 1:

你从来没有_byte阵列在阅读包裹初始化,因此它是空。

我会做的是,当你写你的包裹,存储字节数组,然后实际的字节数组的长度。 当你读了包裹,先读长度和初始化数组_byte该大小的新数组,然后字节数组中读取。


代码注释移动

在写...

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

在读...

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


Answer 2:

而不存储字节数组长度较短的溶液:

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


文章来源: Transferring ByteArray through Parcel returns NullPointerException