代码之家  ›  专栏  ›  技术社区  ›  Илья Жиленков

房间错误:无法确定如何将此字段保存到数据库中。您可以考虑为其添加类型转换器

  •  2
  • Илья Жиленков  · 技术社区  · 1 年前

    我试着为设置一个类型转换器 city 在实体上,但仍然存在问题标题中的错误。让我们看看我的实体:

    @Entity(tableName = "users")
    data class UserEntity(
        @PrimaryKey(autoGenerate = true)
        val id: Int = 0,
        val name: String,
        val city: City?
    )
    

    是的,有人可以告诉我类型转换器应该应用于字段 城市 这样地:

    @TypeConverter(CityConverter::class)
    val city: City?
    

    但它也不起作用))
    下面是我的数据库, City CityConverter

    @Database(entities = [UserEntity::class], version = 1, exportSchema = false)
    // As you can see, I apply type converter here
    @TypeConverters(CityConverter::class)
    abstract class MyDatabase : RoomDatabase() {
        abstract val dao: MyDao
    
        companion object {
            @Volatile
            private var instance: MyDatabase? = null
    
            fun getInstance(context: Context): MyDatabase {
                var currentInstance = instance
                if (currentInstance == null) {
                    currentInstance =
                        Room.databaseBuilder(context, MyDatabase::class.java, "mydb").build()
                    instance = currentInstance
                    return currentInstance
                }
                return currentInstance
            }
        }
    
    }
    

    城市

    data class City(
        val name: String
    )
    

    和转换器:

    class CityConverter {
    
        private val jsonAdapter = Moshi.Builder()
            .addLast(KotlinJsonAdapterFactory())
            .build()
            .adapter(City::class.java)
    
        @TypeConverter
        fun cityToString(city: City?): String {
            return city?.let { jsonAdapter.toJson(it) } ?: ""
        }
    
        @TypeConverters
        fun stringToCity(json: String?): City? {
            return json?.let { jsonAdapter.fromJson(json) }
        }
    }
    

    我按照文档中的内容做了所有操作,但这不起作用(

    1 回复  |  直到 1 年前
        1
  •  2
  •   CommonsWare    1 年前

    尝试替换:

        @TypeConverters
        fun stringToCity(json: String?): City? {
            return json?.let { jsonAdapter.fromJson(json) }
        }
    

    使用,通过移除 s 从…起 @TypeConverters :

        @TypeConverter
        fun stringToCity(json: String?): City? {
            return json?.let { jsonAdapter.fromJson(json) }
        }