房间数据库中不同自定义对象实体的不同类型转换器

问题描述

这里我需要在房间数据库中存储多个自定义实体在同一个表中。这些东西在单个类型转换器中工作,但是当它出现在多个类型转换器的情况下时,它会抛出错误

import androidx.room.Entity
import androidx.room.PrimaryKey
import androidx.room.TypeConverter
import androidx.room.TypeConverters
import com.google.gson.Gson
import com.google.gson.reflect.Typetoken
import java.lang.reflect.Type


@Entity(tableName = "tbl_finalOrder")
@TypeConverters(ItemEntityConverter::class)
data class FinalOrdersEntity (
    @PrimaryKey(autoGenerate = true)
    val id:Int,val itemEntity: ItemEntity?,// val itemEntity: String? = null,var quantity: String?=null,var unitName: String?=null,var unitId: Int?=null,var statusOfScheme: Boolean?=null,@TypeConverters(SchemeDetailConverter::class)
    var listofScheme: List<SchemeDetailEntity>?=null,val child_items: String?=null,val selectedOffer:String? = null,var offer:String?=null
)






class ItemEntityConverter {
    @TypeConverter
    fun stringToItemEntity(string: String?): ItemEntity  = Gson().fromJson(string,ItemEntity::class.java)

    @TypeConverter
    fun itemEntityToString(list: ItemEntity?): String =Gson().toJson(list)
}


class SchemeDetailConverter {
    @TypeConverter
    fun stringToSchemeDetailEntity(json: String?): List<SchemeDetailEntity> {
        val gson = Gson()
        val type: Type = object : Typetoken<List<SchemeDetailEntity?>?>() {}.type
        return gson.fromJson<List<SchemeDetailEntity>>(json,type)
    }

    @TypeConverter
    fun schemeDetailEntityToString(list: List<SchemeDetailEntity?>?): String {
        val gson = Gson()
        val type: Type = object : Typetoken<List<SchemeDetailEntity?>?>() {}.type
        return gson.toJson(list,type)
    }
}


当我运行它时,它会要求为 listofScheme 创建类型转换器类。但是,已经有一个类了。

错误 FinalOrdersEntity.java:22: 错误:无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。 private java.util.List listofScheme;

你能告诉我我在这里遗漏了什么地方吗?提前谢谢你..

解决方法


data class FinalOrdersEntity (
    @PrimaryKey(autoGenerate = true)
    val id:Int,@TypeConverters(ItemEntityConverter::class)
     val itemEntity: ItemEntity?,// val itemEntity: String? = null,var quantity: String?=null,var unitName: String?=null,var unitId: Int?=null,var statusOfScheme: Boolean?=null,@TypeConverters(SchemeDetailConverter::class)
    var listOfScheme: List<SchemeDetailEntity>?=null,val child_items: String?=null,val selectedOffer:String? = null,var offer:String?=null
)

您可以为特定字段指定类型转换器类,希望它会清除错误