为了账号安全,请及时绑定邮箱和手机立即绑定

使用房间数据库存储枚举即使使用 TypeConverters 也会出错

使用房间数据库存储枚举即使使用 TypeConverters 也会出错

慕容森 2021-06-07 13:31:30
我已经遵循了有关如何为自定义类型添加 TypeConverters 的房间文档,但我仍然从我的实体类中收到错误消息。我想简单地将Category枚举转换为 a,String以便房间数据库了解如何存储它。下面,每个Exercise都有一个类别,这就是发生错误的地方。这是我的课程:转换器public class Converter {    @TypeConverter    public static String fromCategoryToString(Category category) {        if (category == null)            return null;        return category.toString();    }}类别public enum Category {    EXERCISE("Exercise"),    REST("Rest"),    COUNTDOWN("Countdown");    private final String text;    Category(final String text) {        this.text = text;    }    @Override    public String toString() {        return text;    }}锻炼。为简洁起见,删除了 getter 和 setter。@Entity(tableName = "exercise",        foreignKeys = @ForeignKey(entity = Routine.class,                parentColumns = "rid",                childColumns = "routineId",                onDelete = ForeignKey.CASCADE),        indices = {@Index(value = "name", unique = true), @Index("routineId")})public class Exercise {    @PrimaryKey(autoGenerate = true)    @ColumnInfo(name = "eid")    private int exerciseID;    @ColumnInfo(name = "category")    private Category category; // error occurs here    @ColumnInfo(name = "name")    @NonNull    private String name;    @ColumnInfo(name = "routineId")    private int routineId;    public Exercise(Category category, @NonNull String name) {        this.category = category;        this.name = name;    }}数据库@Database(entities = { Routine.class, Exercise.class}, version = 1)@TypeConverters({ Converter.class })public abstract class AppDatabase extends RoomDatabase {    private static AppDatabase instance;    private static final String dbName = "routines.db";    public abstract RoutineDao routineDao();    public abstract ExerciseDao exerciseDao();    public static AppDatabase getInstance(final Context context) {        if (instance == null) {            instance = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, dbName).build();        }        return instance;    }}
查看完整描述

1 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

您还需要以相反的方式编写转换。


例如


@TypeConverter

    public static Category fromStringToCategory(String category) {

        if (TextUtil.isEmpty(category))

            return DEFAULT_CATEGORY;

        return YOUR_LOGIC_FOR_CONVERSION;

    }


查看完整回答
反对 回复 2021-06-10
  • 1 回答
  • 0 关注
  • 233 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信