【问题标题】:Error of type convertors in room database房间数据库中类型转换器的错误
【发布时间】:2022-01-08 21:22:48
【问题描述】:

我正在尝试为我的应用程序中的模型类制作类型转换器。模型类如下。


订购

@Entity(tableName = "Orders")
data class Order(
    @PrimaryKey
    var customerId:String,
    var companyId:String,
    var orderBookerId:String,
    @ColumnInfo(name = "items") var list:List<SelectedProductsModel>
)

SelectedProductsModel

data class SelectedProductsModel(
    var quantity: Int,
    var skuId: String,
    var companyId: String,
    var productName: String?,
    var vendor_brand_name: String,
    var purchasePrice: Int,
    var image: String,
    var position: Int
):Serializable

现在你可以看到Order 类中有一个var list:List&lt;SelectedProductsModel&gt;。我想为此列表编写一个类型转换器,但我一直收到错误


错误:找不到符号 @androidx.room.TypeConverters(value = {SelectedProductModelConvertor.class})


以下是我的 Room 数据库类

@Database(entities = [VisitedPjpModel::class,Order::class], version = 1)
@TypeConverters(SelectedProductModelConvertor::class)
abstract class RoomDatabaseClass : RoomDatabase()
{
    public abstract fun visitedDao(): VisitedPjpDao
    public abstract fun orderDao():OrderDao


    companion object
    {
        private var instance: RoomDatabaseClass? = null

        fun getInstance(context: Context): RoomDatabaseClass?
        {
            if (instance == null)
            {
                synchronized(RoomDatabaseClass::class)
                {
                    instance = Room.databaseBuilder(context, RoomDatabaseClass::class.java, "tarseel_database").allowMainThreadQueries().build()
                }
            }

            return instance
        }
    }
}

我尝试了不同的类型转换器实现,但我得到了上面提到的相同错误。以下是我尝试过的类型转换器的实现


class SelectedProductModelConvertor
{
  
    @TypeConverter
    fun fromList(value : List<SelectedProductsModel>) = Json.encodeToString(value)

    @TypeConverter
    fun toList(value: String) = Json.decodeFromString<List<SelectedProductsModel>>(value)
}

class SelectedProductModelConvertor
{

    @TypeConverter
    fun listToJson(value: List<SelectedProductsModel>) = Gson().toJson(value)

    @TypeConverter
    fun jsonToList(value: String) = Gson().fromJson(value, Array<SelectedProductsModel>::class.java).toList()
}

  1. 类 SelectedProductModelConvertor {

      @TypeConverter
      fun fromListLangList(value: List<SelectedProductsModel>): String
      {
          val gson = Gson()
          val type = object : TypeToken<List<SelectedProductsModel>>()
          {}.type
          return gson.toJson(value, type)
      }
    
      @TypeConverter
      fun toSelectedProductsModelList(value: String): List<SelectedProductsModel>
      {
          val gson = Gson()
          val type = object : TypeToken<List<SelectedProductsModel>>()
          {}.type
          return gson.fromJson(value, type)
      }
    

    }


我已经尝试了所有这些类型转换器,但我得到了错误。请帮帮我

【问题讨论】:

    标签: android kotlin android-room


    【解决方案1】:

    你不能有一个列的列表/数组。

    你可以做的是,拥有一个包含 List/Array 的类并为此拥有一个类型转换器。

    所以你可以:-

    data class SelectedProductsModelList(
        val selectedProductsModelList: List<SelectedProductsModel>
    )
    

    然后有:-

    @Entity(tableName = "Orders")
    data class Order(
        @PrimaryKey
        var customerId:String,
        var companyId:String,
        var orderBookerId:String,
        @ColumnInfo(name = "items") var list:SelectedProductsModelList //<<<<<<<<<<
    )
    

    和从/转换为 SelectProductsModelList 对象的 TypeConverters,例如

    @TypeConverter
    fun fromSelectedProductsModelList(selectedProductsModelList: SelectedProductsModelList): String {
        return Gson().toJson(selectedProductsModelList)
    }
    @TypeConverter
    fun toSelectedProductsModelList(json: String): SelectedProductsModelList {
        return Gson().fromJson(json,SelectedProductsModelList::class.java)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多