Kotlin TypeConverters无法确定如何将此字段保存到数据库中

Kotlin TypeConverters无法确定如何将此字段保存到数据库中,kotlin,android-room,Kotlin,Android Room,我在实现房间的类型转换器时出错 错误:无法确定如何将此字段保存到数据库中。可以考虑为其添加类型转换器。 private java.util.List最后,我认识到Room需要对类型转换器实现进行一些特殊更改(更改为ArrayList)。尽管如此,我还是不知道这是一个特性还是一个bug,因为在其他情况下,我仍然可以使用List作为类型。这就是我所做的细节,现在我可以运行它了 @Entity(tableName = "ProfileEntities") data class ProfileEntit

我在实现房间的类型转换器时出错

错误:无法确定如何将此字段保存到数据库中。可以考虑为其添加类型转换器。
private java.util.List最后,我认识到Room需要对类型转换器实现进行一些特殊更改(更改为
ArrayList
)。尽管如此,我还是不知道这是一个特性还是一个bug,因为在其他情况下,我仍然可以使用List作为类型。这就是我所做的细节,现在我可以运行它了

@Entity(tableName = "ProfileEntities")
data class ProfileEntity(
        @TypeConverters(ProfileTypeConverter::class)
        @SerializedName("details") var details: List<ProfileDetailEntity> = listOf(),
        @Embedded
        @SerializedName("images") var images: ProfileImagesEntity = ProfileImagesEntity(),
        @PrimaryKey
        @SerializedName("masterId") var masterId: Long = 0,
        @TypeConverters(OtherServicesTypeConverter::class)
        @SerializedName("otherServices") var otherServices: ArrayList<HashMap<String, OtherServiceEntity>> = arrayListOf(),
        @SerializedName("updatedAt") var updatedAt: String = ""
)
@Entity(tableName=“ProfileEntities”)
数据类概要文件实体(
@类型转换器(ProfileTypeConverter::类)
@SerializedName(“详细信息”)变量详细信息:List=listOf(),
@嵌入
@SerializedName(“图像”)变量图像:ProfileImageSenty=ProfileImageSenty(),
@主键
@SerializedName(“masterId”)变量masterId:Long=0,
@类型转换器(OtherServicesTypeConverter::类)
@SerializedName(“otherServices”)变量otherServices:ArrayList=arrayListOf(),
@SerializedName(“updatedAt”)变量updatedAt:String=“”
)
以及转换器的实现

class ProfileTypeConverter {
    private val gson = Gson()
    @TypeConverter
    fun stringToList(data: String?): List<ProfileDetailEntity> {
        if (data == null) {
            return Collections.emptyList()
        }

        val listType = object : TypeToken<List<ProfileDetailEntity>>() {

        }.type

        return gson.fromJson<List<ProfileDetailEntity>>(data, listType)
    }

    @TypeConverter
    fun listToString(someObjects: List<ProfileDetailEntity>): String {
        return gson.toJson(someObjects)
    }
}

class OtherServicesTypeConverter {
    private val gson = Gson()
    @TypeConverter
    fun stringToList(data: String?): ArrayList<HashMap<String, OtherServiceEntity>> {
        if (data == null) {
            return ArrayList()
        }

        val listType = object : TypeToken<ArrayList<HashMap<String, OtherServiceEntity>>>() {

        }.type

        return gson.fromJson<ArrayList<HashMap<String, OtherServiceEntity>>>(data, listType)
    }

    @TypeConverter
    fun listToString(objects: ArrayList<HashMap<String, OtherServiceEntity>>): String {
        return gson.toJson(objects)
    }
}
class ProfileTypeConverter{
private val gson=gson()
@类型转换器
有趣的字符串列表(数据:字符串?):列表{
如果(数据==null){
return Collections.emptyList()
}
val listType=对象:TypeToken(){
}.类型
返回gson.fromJson(数据,列表类型)
}
@类型转换器
趣味listToString(someObjects:List):字符串{
返回gson.toJson(someObjects)
}
}
类OtherServicesTypeConverter{
private val gson=gson()
@类型转换器
趣味stringToList(数据:String?):ArrayList{
如果(数据==null){
返回ArrayList()
}
val listType=对象:TypeToken(){
}.类型
返回gson.fromJson(数据,列表类型)
}
@类型转换器
趣味列表字符串(对象:ArrayList):字符串{
返回gson.toJson(对象)
}
}

快乐编码

我仍然在处理这个问题,即使使用这个新的类型转换器。有什么建议吗?这取决于具体的实现,在我的例子中,它属于
列表
@Entity(tableName = "ProfileEntities")
data class ProfileEntity(
        @TypeConverters(ProfileTypeConverter::class)
        @SerializedName("details") var details: List<ProfileDetailEntity> = listOf(),
        @Embedded
        @SerializedName("images") var images: ProfileImagesEntity = ProfileImagesEntity(),
        @PrimaryKey
        @SerializedName("masterId") var masterId: Long = 0,
        @TypeConverters(OtherServicesTypeConverter::class)
        @SerializedName("otherServices") var otherServices: ArrayList<HashMap<String, OtherServiceEntity>> = arrayListOf(),
        @SerializedName("updatedAt") var updatedAt: String = ""
)
class ProfileTypeConverter {
    private val gson = Gson()
    @TypeConverter
    fun stringToList(data: String?): List<ProfileDetailEntity> {
        if (data == null) {
            return Collections.emptyList()
        }

        val listType = object : TypeToken<List<ProfileDetailEntity>>() {

        }.type

        return gson.fromJson<List<ProfileDetailEntity>>(data, listType)
    }

    @TypeConverter
    fun listToString(someObjects: List<ProfileDetailEntity>): String {
        return gson.toJson(someObjects)
    }
}

class OtherServicesTypeConverter {
    private val gson = Gson()
    @TypeConverter
    fun stringToList(data: String?): ArrayList<HashMap<String, OtherServiceEntity>> {
        if (data == null) {
            return ArrayList()
        }

        val listType = object : TypeToken<ArrayList<HashMap<String, OtherServiceEntity>>>() {

        }.type

        return gson.fromJson<ArrayList<HashMap<String, OtherServiceEntity>>>(data, listType)
    }

    @TypeConverter
    fun listToString(objects: ArrayList<HashMap<String, OtherServiceEntity>>): String {
        return gson.toJson(objects)
    }
}