Android Room错误:无法识别枚举列表的TypeConverter

Android Room错误:无法识别枚举列表的TypeConverter,第1张

概述Room库无法识别我为枚举列表创建的TypeConverter.但是,当我将其更改为枚举的ArrayList时,它工作正常.任何人都知道为什么以及我该怎么做才能使这个工作与List? (在Kotlin中使用List更容易,我真的不想因为这个原因而转换回ArrayList). 这是我的代码: 我的模特: @Entitydata class Example(@PrimaryKey val id: S Room库无法识别我为枚举列表创建的TypeConverter.但是,当我将其更改为枚举的ArrayList时,它工作正常.任何人都知道为什么以及我该怎么做才能使这个工作与List? (在Kotlin中使用List更容易,我真的不想因为这个原因而转换回ArrayList).

这是我的代码:

我的模特:

@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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1138470.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存