【问题标题】:Parceler: Unable to find read/write generator for type ForeignCollectionParceler:找不到类型 ForeignCollection 的读/写生成器
【发布时间】:2018-01-29 17:44:40
【问题描述】:

我尝试使用 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;
}

【问题讨论】:

    标签: java android ormlite parceler


    【解决方案1】:

    您需要提供转换器,因为 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

    【讨论】:

      【解决方案2】:

      也许你忘了在类名上方加上@Parcel

      *对于出现相同错误消息的任何人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多