我的问题是如何存储
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/