Room库无法识别我为枚举列表创建的TypeConverter.但是,当我将其更改为枚举的ArrayList时,它工作正常.任何人都知道为什么以及我该怎么做才能使这个工作与List? (在Kotlin中使用List更容易,我真的不想因为这个原因而转换回ArrayList).
这是我的代码:
我的模特:
@Entity
data class Example(@PrimaryKey val id: String?,val name: String,var days: List?)
DayOfWeek是一个枚举:
enum class DayOfWeek {
MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;
val value: Int
get() = ordinal + 1
companion object {
private val ENUMS = DayOfWeek.values()
fun of(dayOfWeek: Int): DayOfWeek {
if (dayOfWeek < 1 || dayOfWeek > 7) {
throw RuntimeException("Invalid value for DayOfWeek: " + dayOfWeek)
}
return ENUMS[dayOfWeek - 1]
}
}
}
我的TypeConverter:
private const val SEPARATOR = ","
class DayOfWeekConverter {
@TypeConverter
fun daysOfWeekToString(daysOfWeek: List?): String? {
return daysOfWeek?.map { it.value }?.joinToString(separator = SEPARATOR)
}
@TypeConverter
fun stringToDaysOfWeek(daysOfWeek: String?): List? {
return daysOfWeek?.split(SEPARATOR)?.map { DayOfWeek.of(it.toInt()) }
}
}
我将它设置在我的DB类中,如下所示:
@Database(entities = arrayOf(Example::class),version = 1)
@TypeConverters(DayOfWeekConverter::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun exampleDao(): ExampleDao
}
我的DAO看起来像这样:
@Dao
interface ExampleDao {
@Query("SELECT * FROM example")
fun getAll(): LiveData>
@Insert(onConflict = REPLACE)
fun save(examples: List)
}
我用这段代码得到的错误是:
error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
e:
e: private java.util.List extends com.example.DayOfWeek> days;
就像我上面说的,如果我将days属性更改为ArrayList< DayOfWeek> (并在DayOfWeekConverter中对ArrayList进行更改)然后一切正常.如果有人能帮我解决这个问题并告诉我如何在这里使用List它会有很大的帮助,它让我发疯:/.