【问题标题】:Different typeconverters for different custom object entity in room database房间数据库中不同自定义对象实体的不同类型转换器
【发布时间】:2021-03-25 07:26:52
【问题描述】:

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

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:错误:无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。 私有 java.util.List listOfScheme;

你能告诉我我在哪里缺少什么吗?提前谢谢你..

【问题讨论】:

    标签: java android kotlin android-room android-database


    【解决方案1】:
    
    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
    )
    

    检查 SchemeDetailEntity 是否有任何以 class 作为类型的变量,如果是,那么你也应该为它添加类型转换器类

    【讨论】:

      猜你喜欢
      • 2020-11-19
      • 2023-03-29
      • 1970-01-01
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      • 2018-07-06
      相关资源
      最近更新 更多