Parceler: невозможно найти генератор чтения / записи для типа ForeignCollection

Я пытаюсь использовать ORMLite с Parceler, но Parceler ловит ошибку:

Error:(44, 36) error: Parceler: Unable to find read/write generator for type com.j256.ormlite.dao.ForeignCollection<PassKeyItem> for CategoryItem.passKeyItems

Вот мои объекты:

CategoryItem.class

@Parcel
@DatabaseTable(tableName = "categories")
public class CategoryItem {
     ...
    @ForeignCollectionField(columnName = FIELD_PASS_KEY_ITEMS)
    ForeignCollection<PassKeyItem> passKeyItems;
}

PassKeyItem.class

@Parcel
@DatabaseTable(tableName = "passkey")
public class PassKeyItem {
...
  @DatabaseField(foreign = true, foreignAutoRefresh = true, columnName = FIELD_CATEGORY_ITEM_ID)
    private CategoryItem categoryItem;
}

2 ответа

Решение

Вам нужно предоставить конвертер, потому что Parceler не знает, как сериализовать ForeignCollection,

Вот пример из документации:

@Parcel
public class Item {
    @ParcelPropertyConverter(ItemListParcelConverter.class)
    public List<Item> itemList;
}
@Parcel public class SubItem1 extends Item {}
@Parcel public class SubItem2 extends Item {}

public class ItemListParcelConverter implements ParcelConverter<List<Item>> {
    @Override
    public void toParcel(List<Item> input, Parcel parcel) {
        if (input == null) {
            parcel.writeInt(-1);
        }
        else {
            parcel.writeInt(input.size());
            for (Item item : input) {
                parcel.writeParcelable(Parcels.wrap(item), 0);
            }
        }
    }

    @Override
    public List<Item> fromParcel(Parcel parcel) {
        int size = parcel.readInt();
        if (size < 0) return null;
        List<Item> items = new ArrayList<Item>();
        for (int i = 0; i < size; ++i) {
            items.add((Item) Parcels.unwrap(parcel.readParcelable(Item.class.getClassLoader())));
        }
        return items;
    }
}

Более подробная информация на https://github.com/johncarl81/parceler

Может быть, вы забыли поставить @Parcel над названием класса.

* для любого с тем же сообщением об ошибке, которое заканчивается здесь.

Другие вопросы по тегам