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
над названием класса.
* для любого с тем же сообщением об ошибке, которое заканчивается здесь.