我有对象
public class PhotoEntity {
@SerializedName("users_mentioned")
@DatabaseField(???)
public ArrayList<Integer> mentions = new ArrayList<>();
// Other fields
}
我需要存储照片,但我需要如何标记我的mentions
列表?
注意:我使用 Gson 来解析对象,因此必须保存结构。
答案 0 :(得分:1)
您可以在该字段中使用自定义容器:
public class PhotoEntity {
@SerializedName("users_mentioned")
@DatabaseField(persisterClass = SerializableCollectionsType.class)
public ArrayList<Integer> mentions = new ArrayList<>();
}
持久性需要单身,但这很简单:
public class SerializableCollectionsType extends SerializableType {
private static SerializableCollectionsType singleton;
private SerializableCollectionsType() {
super(SqlType.SERIALIZABLE, new Class<?>[0]);
}
// ormLite requires a getSingleton() method
public static SerializableCollectionsType getSingleton() {
if (singleton == null) {
synchronized (SerializableCollectionsType.class) {
if (singleton == null) {
singleton = new SerializableCollectionsType();
}
}
}
return singleton;
}
@Override
public boolean isValidForField(Field field) {
return Collection.class.isAssignableFrom(field.getType());
}
}
答案 1 :(得分:0)
我认为在sqlite行中存储数组是不可能的,你需要使用外表存储它。
但是如果你想继续存储没有外表的数组,我建议你将json存储在sqlite数据库中。
public class PhotoEntity {
@SerializedName("users_mentioned")
@DatabaseField
public String mentions;
// Other fields
}
因此,当您存储提及列表时,您应将其存储为json字符串
List<Mention> mentions = new ArrayList<>();
mentions.add(new Mention());
String jsonMentions = new Gson().toJson(mentions);
PhotoEntity photoEntity = new PhotoEntity();
photoEntity.setMentions(jsonMentions);