【问题标题】:How to put MutableList<> into Entity (room, Kotlin)如何将 MutableList<> 放入实体(房间,Kotlin)
【发布时间】:2021-06-24 13:04:59
【问题描述】:

我发现将自定义列表添加到实体中有些困难。这是我的代码,我不太确定我错过了什么

AppUsageData

class AppUsageData(val appName: String, val packageName: String, val imageId: Drawable, val maxUsage: Int, val mAhPerHour: Float, val mAhDrained: Float, val allMahDrained: Float, val allSecondsOfUsage: Int, val firstTimeStamp: Long, val lastTimeStamp: Long, val totalTimeVisible: Long, val lastTimeUsed: Long, val lastTimeVisible: Long, val totalTimeInForeground: Long, val lastTimeForegroundServiceUsed: Long, val totalTimeForegroundServiceUsed: Long)

转换器

class Converters {
    @TypeConverter
    fun fromAppUsageDataList(value : MutableList<AppUsageData>) = Json.encodeToString(value)

    @TypeConverter
    fun toAppUsageDataList(value: String) = Json.decodeFromString<MutableList<AppUsageData>>(value)
}

数据库

@Database(entities = [..., ...],
    autoMigrations = [
    AutoMigration (from = 3, to = 4)],
    version = 4,
    exportSchema = true)
@TypeConverters(Converters::class)
abstract class BatteryInfoDatabase : RoomDatabase() {
.
.
.
}

这是我遇到的一个例外

Caused by: kotlinx.serialization.SerializationException: Serializer for class 'AppUsageData' is not found.
    Mark the class as @Serializable or provide the serializer explicitly.
        at kotlinx.serialization.internal.Platform_commonKt.serializerNotRegistered(Platform.common.kt:91)
        at kotlinx.serialization.internal.PlatformKt.platformSpecificSerializerNotRegistered(Platform.kt:29)
        at kotlinx.serialization.SerializersKt__SerializersKt.serializer(Serializers.kt:59)
        at kotlinx.serialization.SerializersKt.serializer(Unknown Source:1)
        at kotlinx.serialization.SerializersKt__SerializersKt.builtinSerializerOrNull$SerializersKt__SerializersKt(Serializers.kt:79)
        at kotlinx.serialization.SerializersKt__SerializersKt.serializerByKTypeImpl$SerializersKt__SerializersKt(Serializers.kt:69)
        at kotlinx.serialization.SerializersKt__SerializersKt.serializer(Serializers.kt:54)
        at kotlinx.serialization.SerializersKt.serializer(Unknown Source:1)
        at com.paget96.batteryguru.utils.database.batteryinfo.Converters.fromAppUsageDataList(Converters.kt:17)

我尝试将@Serializable 添加到类AppUsageData,但同样的事情发生

【问题讨论】:

  • 你按照错误告诉你的去做了吗?
  • 是的,尝试添加@Serializable,再次,什么都没有
  • 也许edit你的问题包括那个?你肯定需要这个注释才能工作。

标签: android kotlin android-room


【解决方案1】:

只是错过了这个插件,在添加这个并将@Serializable 带回 class AppUsageData 之后一切正常。

plugins {
    id 'org.jetbrains.kotlin.plugin.serialization' version '1.5.0'
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-21
    • 2020-11-14
    • 2021-10-12
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多