2016-06-27 19 views
1

Ich versuche, meine Modelle mit dem greendao Generator und ich bin nicht ganz sicher zu erzeugen, wie eine Eigenschaft hinzufügen, die ein Ich weiß List<String>Wie füge ich eine List <String>-Eigenschaft zu meinem greendao-Generator hinzu?

akzeptiert wie ein List<Model> hinzufügen, um den addToMany verwenden, aber was ist, wenn es nötig ist Speichern Sie eine ArrayList in einem meiner Modelle?

Etwas wie folgt aus:

Entity tags = schema.addEntity("Tags"); 
    tags.implementsInterface("android.os.Parcelable"); 
    tags.addLongProperty("tagId").primaryKey().autoincrement(); 
    tags.addLongProperty("date"); 
    tags.addArrayStringProperty("array"); // something like this 

Ich dachte, ein anderes Unternehmen zu schaffen, alle Werte des Arrays zu speichern und dabei die ToMany wie diese

Entity myArray = schema.addEntity("MyArray"); 
    myArray.implementsInterface("android.os.Parcelable"); 
    myArray.addLongProperty("myArrayId").primaryKey().autoincrement(); 
    myArray.addLongProperty("id").notNull().getProperty(); 
    Property tagId = myArray.addLongProperty("tagId").getProperty(); 

ToMany tagToMyArray = tag.addToMany(myArray, tagId); 
tagToMyArray.setName("tags"); 
myArray.addToOne(tag, tagId); 

Antwort

4

Sie, dass Arraylist serialise und Speichern Sie dann als String-Eigenschaft in der greenDAO-Tabelle.

String arrayString = new Gson().toJson(yourArrayList); 

und dann abrufen zurück wie diese

Type listType = new TypeToken<ArrayList<String>>(){}.getType(); 
List<String> arrayList = new Gson().fromJson(stringFromDb, listType) 
+0

Danke für so eine einfache Antwort – Haroon

2

Eine weitere way.You @convert Anmerkung verwenden können.

@Entity 
public class User { 
@Id 
private Long id; 

@Convert(converter = RoleConverter.class, columnType = Integer.class) 
private Role role; 

public enum Role { 
    DEFAULT(0), AUTHOR(1), ADMIN(2); 

    final int id; 

    Role(int id) { 
     this.id = id; 
    } 
} 

public static class RoleConverter implements PropertyConverter<Role, Integer> { 
    @Override 
    public Role convertToEntityProperty(Integer databaseValue) { 
     if (databaseValue == null) { 
      return null; 
     } 
     for (Role role : Role.values()) { 
      if (role.id == databaseValue) { 
       return role; 
      } 
     } 
     return Role.DEFAULT; 
    } 

    @Override 
    public Integer convertToDatabaseValue(Role entityProperty) { 
     return entityProperty == null ? null : entityProperty.id; 
    } 
} 
}