android - 如何在 RoomDatabase 中存储 Enum 的 ArrayList

标签 android android-sqlite android-room

我的问题是如何存储

List<Enum>

在房间数据库中, 到目前为止,我找不到答案。

最佳答案

枚举:

public enum HelloEnum {
    A,
    B,
    C
}

转换器:

public class EnumConverter {

    @TypeConverter
    public List<HelloEnum> storedStringToEnum(String value) {
        List<String> dbValues = Arrays.asList(value.split("\\s*,\\s*"));
        List<HelloEnum> enums = new ArrayList<>();

        for (String s: dbValues)
            enums.add(HelloEnum.valueOf(s));

        return enums;
    }

    @TypeConverter
    public String languagesToStoredString(List<HelloEnum> cl) {
        String value = "";

        for (HelloEnum lang : cl)
            value += lang.name() + ",";

        return value;
    }    
}

就插入和获取数据而言,这将起作用而不是询问问题。

@Dao
public interface HelloPojoDao {

    @Query("SELECT * FROM helloPojo")
    List<HelloPojo> fetchAll();

    @Insert
    void insertPojo(HelloPojo pojo);
}

不过,我要指出的是,现在通过枚举进行过滤变得有点棘手了。例如,如果您想编写一个查询来获取包含 enum.A 和 enum.B 的对象,您将必须构建一个查询来为它们查询一个字符串对象。在这种情况下,“SELECT * FROM pojo WHERE enums contains 'A,' and 'B,'”。因此,最好将数字值分配给您的枚举(如@Kuffs 回答详细信息),因为解析 int 可能会产生更少的问题解析字符串。

希望这能解决您的问题。欢迎在评论区提问,祝狩猎愉快!

关于android - 如何在 RoomDatabase 中存储 Enum 的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44698415/

相关文章:

android - 房间迁移-如何向现有表添加新的 NON-NULL 和 String 类型的列

java - 我如何调用 Intent 并将其放入我的 vector 中?

java - 如何在Android应用程序中使用Oovoo SDK?

java - 错误: incompatible types: MainFragment cannot be converted to Activity

java - 来自网络调用的房间数据库中的非重复条目

android - 就像房间持久性库中区分大小写一样

android - 使用 OnClickListener 自定义 ListView

java - MPAndroidChart 中条形图的单击事件是在条形列上触发的,而不是仅在条形图上触发

android.database.sqlite.SQLiteException : no such column : id (code 1) while compiling : s

java - Android sqlite更新方法; java.lang.IllegalStateException : Could not execute method of the activity