【问题标题】:How to add type converter using Room?如何使用 Room 添加类型转换器?
【发布时间】:2020-01-05 16:55:45
【问题描述】:

我正在使用 Room 在 SQLite 中保存数据。但是,我得到了错误类型转换器。

我有这样的数据类:

@Entity(tableName = FavoriteDatabase.teamTable)
data class TeamItem(
    @SerializedName("idAPIfootball")
    val idAPIfootball: Any?,
    @SerializedName("idLeague")
    val idLeague: String?,
    @SerializedName("idSoccerXML")
    val idSoccerXML: String?,
    @PrimaryKey
    @SerializedName("idTeam")
    val idTeam: String,
    @SerializedName("intFormedYear")
    val intFormedYear: String?
}

我得到错误:

error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
    private final java.lang.Object idAPIfootball = null;

我尝试添加转换器:

object Converter {
    @TypeConverter
    @JvmStatic
    fun toString(data: Any): String = data.toString()

    @TypeConverter
    @JvmStatic
    fun toAny(data: String): Any = data
}

并添加到 RoomDatabase 中:

@Database(entities = [TeamItem::class, EventItem::class], version = 1, exportSchema = false)
@TypeConverters(Converter::class)
abstract class FavoriteDatabase : RoomDatabase() {
}

我得到错误:

Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter data
        at id.afdaldev.footballmatchscheduleapp.data.model.Converter.toString(Unknown Source:2)

【问题讨论】:

  • 已解决。 object Converter { @TypeConverter @JvmStatic fun toString(data: Any?): String? { return data?.toString() } @TypeConverter @JvmStatic fun toAny(data: String?): Any? = data }

标签: android-studio kotlin android-room


【解决方案1】:

将此代码用于转换器

 @TypeConverter
    fun fromAnyToString(value: Any?): String? {
        return if (value == null) null else String(value)
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    相关资源
    最近更新 更多