java Parcel@e7a33b1: Неизвестный неизвестный тип arraylist - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь использовать 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: Неизвестный код неизвестного типа 7143535 по смещению 372

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

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

1 Ответ

1 голос
/ 22 января 2020

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

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

    parcel.writeTypedList (secondChildCategories);

  2. использовать createTypedArrayList для чтения из Parcel (альтернативно readTypedList can быть использованы)

    secondChildCategories = in.createTypedArrayList (SecondChildCategory.CREATOR);

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

...