java – Parceler:无法找到类型为ForeignCollection的读/写生成器
作者:互联网
我尝试使用Parceler来使用ORMLite,但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;
}
解决方法:
您需要提供转换器,因为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#custom-serialization
标签:android,java,ormlite,parceler 来源: https://codeday.me/bug/20190724/1525054.html