gpt4 book ai didi

android - 如何在TypeConverter中使用Gson将Kotlin枚举与Room存储在一起?

转载 作者:行者123 更新时间:2023-12-02 13:44:45 24 4
gpt4 key购买 nike

我在尝试将Room的 Kotlin枚举保存为JSON(使用Gson)时遇到问题。我已经完全遵循official Google instruction并添加了TypeConverter,但是它始终显示错误:无法弄清楚如何将该字段保存到数据库中。您可以考虑为其添加类型转换器。

我的实体类:

@Entity(tableName = TextHighlight.TABLE_NAME)
data class TextHighlight.TABLE_NAME(

@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = COLUMN_ID)
var id: Long = 0,

@TypeConverters(HighlightingColorConverter::class)
@ColumnInfo(name = COLUMN_HIGHLIGHT)
var color: HighlightingColor

) {

我的 Kotlin枚举类别:
enum class HighlightingColor(

@SerializedName("rgb")
var rgb: String,

@SerializedName("title")
var title: String

)

我的 TypeConverter :
class HighlightingColorConverter {

@TypeConverter
fun fromHighlightingColor(highlight: HighlightingColor) = Gson().toJson(highlight)

@TypeConverter
fun toHighlightingColor(s: String): HighlightingColor =
Gson().fromJson(s, HighlightingColor::class.java)

}

无法理解是怎么回事。请帮忙弄清楚!

最佳答案

一段时间后,我想出了解决方法。

  • TypeConverter函数应放在companion object中,并具有@JvmStatic批注。这听起来合乎逻辑,因为这些函数在Java中应该是静态的。
  • @TypeConverters批注不应放置在实体字段上方,而应放置在孔实体数据类上方。

  • 最终代码是:
    @TypeConverters(TextHighlight.HighlightingColorConverter::class)
    @Entity(tableName = TextHighlight.TABLE_NAME)
    data class TextHighlight(

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = COLUMN_ID)
    var id: Long = 0,

    @ColumnInfo(name = COLUMN_HIGHLIGHT)
    var color: HighlightingColor

    ) {

    class HighlightingColorConverter {

    companion object {

    @JvmStatic
    @TypeConverter
    fun fromHighlightingColor(highlight: HighlightingColor) = Gson().toJson(highlight)

    @JvmStatic
    @TypeConverter
    fun toHighlightingColor(s: String): HighlightingColor =
    Gson().fromJson(s, HighlightingColor::class.java)

    }

    }

    }

    关于android - 如何在TypeConverter中使用Gson将Kotlin枚举与Room存储在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59843698/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com