Подтвердить что ты не робот

Передача ByteArray через Parcel возвращает NullPointerException

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. Может ли кто-нибудь сказать, в чем проблема? Я пытаюсь передать загруженные байты изображения из одного действия в другое.

4b9b3361

Ответ 1

Вы никогда не инициализируете массив _byte после прочтения посылки, поэтому оно равно null.

Что я буду делать, когда вы пишете свой пакет, сохраните длину массива байтов, за которым следует фактический массив байтов. Когда вы прочитаете посылку, сначала прочитайте длину и инициализируйте свой массив _byte новым массивом этого размера, а затем прочитайте в массиве байтов.


Код перемещен из комментария

В записи...

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

и в read...

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

Ответ 2

Более короткое решение без сохранения длины массивов байтов:

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