如何在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 }
- Kotlin IllegalStateException:在类路径中找不到资源:kotlin / .kotlin_string_table
- Login Activity示例中的checkParameterIsNotNull错误
- 创建新的空行为后出错
- 如何在我的Realm迁移代码中指定一个盒装字段可以为空?
- 如何在Kotlin中扩展android.widget.FrameLayout(RequiresApi 21,但是我需要使用minSdk 19)
- 使用Project Astoria转换Kotlin Android应用程序
- 使用改造方法更具表现力的方式
- Android Kotlin`.replaceRange`不会替换SpannableString中的文本
- 在Kotlin中使用TypeAdapter实现TypeAdapterFactory