2016-06-08 1 views
2

J'essaie d'utilisateur ORMLite avec Parceler, mais Parceler attraper une erreur:Parceler: Impossible de trouver lecture/générateur d'écriture pour le type ForeignCollection

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

Voici mes objets:

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

Répondre

6

Vous devez fournir un convertisseur, car Parceler ne sait pas comment sérialiser un ForeignCollection.

Voici un exemple de la documentation:

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

Plus d'informations sur https://github.com/johncarl81/parceler#custom-serialization

0

Peut-être que vous avez oublié de mettre @Parcel au-dessus du nom de classe.

* pour toute personne ayant le même message d'erreur qui se termine ici.