java Parcel@e7a33b1: распаковка неизвестного типа arraylist

Я пытаюсь использовать Parcelable для передачи данных в Android, но у меня есть ошибка в этой строке, когда я использую ее в правильном типе, я не знал, что я здесь пропускаю.

Вот объект, у которого возникла проблема с разделением:

ArrayList<SecondChildCategory> secondChildCategories;
   public ArrayList<SecondChildCategory> getSecondChildCategories() {
        return secondChildCategories;
    }

    public void setSecondChildCategories(ArrayList<SecondChildCategory> secondChildCategories) {
        this.secondChildCategories = secondChildCategories;
    }

Здесь конструктор участка для чтения данных:

protected ChildCategory(Parcel in) {
    if (in.readByte() == 0) {
        id = null;
    } else {
        id = in.readInt();
    }
    image = in.readString();
    softDelete = in.readString();
    if (in.readByte() == 0) {
        productCategoryId = 0;
    } else {
        productCategoryId = in.readInt();
    }
    createdAt = in.readString();
    updatedAt = in.readString();
    parentCategoryID = in.readString();
    backgroundColor = in.readString();
    name = in.readString();
    secondChildCategories = in.readArrayList(SecondChildCategory.class.getClassLoader()); // error reported here 
    hasChild = in.readByte() != 0;

}

а вот как я это пишу:

@Override
public void writeToParcel(Parcel parcel, int i) {
    parcel.writeInt(id);
    parcel.writeString(image);
    parcel.writeString(softDelete);
    parcel.writeInt(productCategoryId);
    parcel.writeString(createdAt);
    parcel.writeString(updatedAt);
    parcel.writeString(parentCategoryID);
    parcel.writeString(backgroundColor);
    parcel.writeString(name);
    parcel.writeList(secondChildCategories);
    parcel.writeByte((byte) (hasChild ? 1 : 0));

}

Я получил ошибку:

Вызвано: java.lang.RuntimeException: Parcel android.os.Parcel@e7a33b1: Unmarshalling unknown type code 7143535 at offset 372

в этой строке кода:

secondChildCategories = in.readArrayList(SecondChildCategory.class.getClassLoader());

person Neo    schedule 20.01.2020    source источник
comment
То, как вы читаете int, неверно. Если у вас есть вызов writeInt, то у вас должен быть соответствующий вызов readInt и ничего больше (если вы сначала вызываете readByte, то позиция данных перемещается, а следующий вызов readInt считывает неправильные байты). Чего вы хотите достичь с условием if (in.readByte() == 0)?   -  person art    schedule 23.01.2020
comment
Я получил ошибку для значений int и решил ее так, как я помню   -  person Neo    schedule 23.01.2020
comment
Кстати, я удаляю это, если и ваш ответ работает, большое спасибо :)   -  person Neo    schedule 23.01.2020


Ответы (1)


Вы должны использовать другие методы для записи и чтения списка Parcelables:

  1. используйте writeTypedList для записи в Parcel

    посылка.writeTypedList(secondChildCategories);

  2. используйте createTypedArrayList< /a> для чтения из Parcel (альтернативно readTypedList)

    secondChildCategories = in.createTypedArrayList(SecondChildCategory.CREATOR);

Надеюсь, это поможет.

person art    schedule 22.01.2020