猿问

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

我已经遵循了有关如何为自定义类型添加 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;

    }



}


慕容森
浏览 234回答 1
1回答

互换的青春

您还需要以相反的方式编写转换。例如@TypeConverter    public static Category fromStringToCategory(String category) {        if (TextUtil.isEmpty(category))            return DEFAULT_CATEGORY;        return YOUR_LOGIC_FOR_CONVERSION;    }
随时随地看视频慕课网APP

相关分类

Java
我要回答