web-dev-qa-db-ja.com

Parcelを介してByteArrayを転送すると、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の例外が返されます。誰かが問題は何であるかを言うことができますか?私がやろうとしているのは、ダウンロードした画像バイトをあるアクティビティから別のアクティビティに転送することです。

19
Debopam Mitra

パーセルの読み取り時に_byte配列を初期化することはないため、nullになります。

私がすることは、小包を書くとき、実際のバイト配列が後に続くバイト配列の長さを保存することです。小包を読み取るときは、最初に長さを読み取り、_byte配列をそのサイズの新しい配列に初期化してから、バイト配列を読み込みます。


コメントからコードを移動

書き込み中...

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

そして読み取り中...

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

バイト配列の長さを格納しない短いソリューション:

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