我正在尝试使用greendao生成器生成我的模型,我不太确定如何添加一个接受List<String>
的属性
我知道如何使用addToMany
添加List<Model>
,但是如果我需要在我的一个模型中存储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);
你可以序列化这个数组列表,然后保存为greenDAO表中的字符串属性。
String arrayString = new Gson().toJson(yourArrayList);
,然后像这样检索它
Type listType = new TypeToken<ArrayList<String>>(){}.getType();
List<String> arrayList = new Gson().fromJson(stringFromDb, listType)
另一种方式。你可以使用@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;
}
}
}