如何在RoomDatabase中存储Enum的ArrayList

我的问题是如何存储

List 

在RoomDatabase中,到目前为止我找不到答案。

枚举:

 public enum HelloEnum { A, B, C } 

转换器:

 public class EnumConverter { @TypeConverter public List storedStringToEnum(String value) { List dbValues = Arrays.asList(value.split("\\s*,\\s*")); List enums = new ArrayList<>(); for (String s: dbValues) enums.add(HelloEnum.valueOf(s)); return enums; } @TypeConverter public String languagesToStoredString(List cl) { String value = ""; for (HelloEnum lang : cl) value += lang.name() + ","; return value; } } 

在插入和提取数据方面,这不会提问。

 @Dao public interface HelloPojoDao { @Query("SELECT * FROM helloPojo") List fetchAll(); @Insert void insertPojo(HelloPojo pojo); } 

然而,我会指出,现在通过枚举过滤变得有点棘手。 例如,如果要编写一个查询来获取包含enum.A和enum.B的对象,则必须构建一个查询来查询字符串对象。 在这种情况下,“SELECT * FROM POJO WHERE枚举包含’A’和’B’,因此最好将数值赋给你的枚举(因为@Kuffs的答案细节),因为解析整数可能产生的问题少于解析字符串。

希望这可以解决您的问题。 随意在评论部分提出任何问题,并快乐狩猎!

将你的枚举序列化为整数,然后存储它们。

检索值时,执行相反的操作。

这两个操作都在我对这个问题的回答中解释:

如何匹配int到枚举

确定使用Kotlin是非常简单的,当使用name

 class EnumTypeConverter { @TypeConverter fun restoreEnum(enumName: String): EnumType = EnumType.valueOf(enumName) @TypeConverter fun saveEnumToString(enumType: EnumType) = enumType.name }