在Android中通过ORMLite保存数组,无需外键/表

时间:2015-11-26 22:26:34

标签: android ormlite

我有对象

public class PhotoEntity {

    @SerializedName("users_mentioned")
    @DatabaseField(???)
    public ArrayList<Integer> mentions = new ArrayList<>();

    // Other fields

}

我需要存储照片,但我需要如何标记我的mentions列表

  

注意:我使用 Gson 来解析对象,因此必须保存结构

2 个答案:

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