2016-06-08 5 views
2

Ich versuche, Benutzer ORMLite mit Parceler, aber Parceler einen Fehler fangen:Parceler: Kann nicht für Typ ForeignCollection Lese/Schreib-Generator finden

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

Hier ist meine Objekte:

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; 
} 

Antwort

6

Sie müssen einen Konverter liefern, weil Parceler nicht weiß, wie man eine ForeignCollection serialisiert.

Hier ist ein Beispiel aus der Dokumentation:

@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; 
    } 
} 

Weitere Informationen unter https://github.com/johncarl81/parceler#custom-serialization

0

Vielleicht vergessen Sie @Parcel über dem Klassennamen zu setzen.

* für jeden mit der gleichen Fehlermeldung, die hier endet.

Verwandte Themen