如何将List <string>属性添加到我的greendao生成器?

时间:2016-06-27 08:59:53

标签: android greendao

我尝试使用greendao生成器生成模型,但我不太确定如何添加接受List<String>的属性

我知道如何使用List<Model>添加addToMany,但如果我需要在我的某个模型中存储ArrayList该怎么办?

这样的事情:

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

我正在考虑创建另一个实体来存储数组的所有值,并像这样执行ToMany

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

2 个答案:

答案 0 :(得分:6)

您可以序列化该ArrayList,然后在greenDAO表中保存为字符串属性。

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

然后像这样将其检索回来

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

答案 1 :(得分:3)

另一种方式。您可以使用@convert注释。

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