
这是我的代码:
我的模特:
@Entitydata class Example(@PrimaryKey val ID: String?,val name: String,var days: List<DayOfWeek>?)
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<DayOfWeek>?): String? { return daysOfWeek?.map { it.value }?.joinToString(separator = SEParaTOR) } @TypeConverter fun stringToDaysOfWeek(daysOfWeek: String?): List<DayOfWeek>? { 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看起来像这样:
@Daointerface ExampleDao { @query("SELECT * FROM example") fun getAll(): liveData<List<Example>> @Insert(onConflict = REPLACE) fun save(examples: List<Example>)} 我用这段代码得到的错误是:
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它会有很大的帮助,它让我发疯:/.
解决方法 出于某种原因,Room不喜欢Kotlin List,但是当我用MutableList替换List时,它开始工作:@Entitydata class Example(@PrimaryKey val ID: String,var days: MutableList<DayOfWeek>?)class DayOfWeekConverter { companion object { @TypeConverter @JvmStatic fun daysOfWeekToString(daysOfWeek: MutableList<DayOfWeek>?): String? = daysOfWeek?.map { it.value }?.joinToString(separator = SEParaTOR) @TypeConverter @JvmStatic fun stringToDaysOfWeek(daysOfWeek: String?): MutableList<DayOfWeek>? = daysOfWeek?.split(SEParaTOR)?.map { DayOfWeek.of(it.toInt()) }?.toMutableList() }} 这不是完美的解决方案,但希望您可以通过它进行更多调查.
您还需要将@PrimaryKey更改为不可为空
总结以上是内存溢出为你收集整理的Android Room错误:无法识别枚举列表的TypeConverter全部内容,希望文章能够帮你解决Android Room错误:无法识别枚举列表的TypeConverter所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)