Получение NullPointerException: попытка получить длину нулевого массива в Parcelable при попытке прочитать байтовый массив в Android

У меня есть класс, который реализует Parcelable. Все мои значения устанавливаются нормально с помощью метода writeToParcel, но при чтении в конструкторе у меня возникает проблема с байтовым массивом, который генерирует исключение NullPointerException:

public final class Product implements Parcelable {

    private Integer ID;
    private byte[] image;

    // Constructors
    public Product(){}

    public Product(Parcel source) {
        this.ID = source.readInt();
        source.readByteArray(this.image);
    }

    public int describeContents() {
        return this.hashCode();
    }

    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(this.ID);
        dest.writeByteArray(this.image);
    }

    public static final Parcelable.Creator<Product> CREATOR
            = new Parcelable.Creator<Product>() {
        public Product createFromParcel(Parcel in) {
            return new Product(in);
        }

        public Product[] newArray(int size) {
            return new Product[size];
        }
    };

    // Getters
    public Integer getID () {
        return this.ID;
    }

    public byte[] getImage() {
        return this.image;
    }

    // Setters
    public void setID (Integer id) { this.ID = id; }

    public void setImage(byte[] image) {
        this.image = image;
    }
}

поэтому я заметил, что байтовый массив не инициализируется перед чтением, а затем я инициализирую его, модифицируя конструктор следующим образом:

    public Product(Parcel source) {
        this.ID = source.readInt();

        this.image = new byte[source.readInt()];
        source.readByteArray(this.image);
    }

и теперь я получаю эту еще одну ошибку:

Caused by: java.lang.NullPointerException: Attempt to get length of null array

Так что я делаю не так?

Во всяком случае, я не понимаю, почему я должен инициализировать массив байтов при чтении, так как сначала вызывается writeToParcel, и присваивать значение байтовому массиву, поэтому при чтении я хочу получить только значение, записанное WriteToParcel, из конструктора ... Может кто-нибудь объяснить мне это тоже, пожалуйста? Может быть, я не понимаю, Parcelable объект вообще

РЕШЕНО:

В записи ...

    dest.writeInt(this.image.length);
    dest.writeByteArray(this.image);

В чтении ...

    this.image = new byte[source.readInt()];
    source.readByteArray(this.image);

Ответы на вопрос(0)

Ваш ответ на вопрос