TypeConverters-如何将对象数组保存到数据库?

问题描述 投票:0回答:1

我的JSON看起来像这样(看一下额外的对象数组:

objects:[
{
    name,
    date,
    string,
    string,
        bonus:[
            {
            bonus_name
            bonus_amount
            bonus_imgurl
            },{
            bonus_name
            bonus_amount
            bonus_imgurl
            },{
            bonus_name
            bonus_amount
            bonus_imgurl
            }
        ]
},
    string,
    string,
        bonus:[
            {
            bonus_name
            bonus_amount
            bonus_imgurl
            },{
            bonus_name
            bonus_amount
            bonus_imgurl
            },{
            bonus_name
            bonus_amount
            bonus_imgurl
            }
        ]
}

]

我已经成功地将对象数组解析到数据库中,每个数组都有自己的行。我现在想使用TypeConverter将奖金添加到每一行

@Entity(tableName = config.TABLE_EVENTS)
data class RoomEventsModel(
        @ColumnInfo(name = "name")
        var eventName: String?, 
        ....
        @TypeConverters(value = [Converters::class])
        @ColumnInfo(name = "bonus_values") var bonus_value: List<Bonus>
){
@PrimaryKey(autoGenerate = true)
var id: Int? = null
}

Converters.class看起来像:

class Converters : Serializable {
    companion object {
        @TypeConverter
        fun fromBonusList(bonusElements : List<Bonus>): String {
            val gson = Gson()
            val type = object : TypeToken<List<Bonus>>() {
            }.type
            return gson.toJson(bonusElements, type)
        }

    @TypeConverter
    fun toBonusList(bonusElements: String?): ArrayList<HashMap<List<Bonus>, RoomEventsModel>>? {
        if (bonusElements == null) {
            return null
        }
        val gson = Gson()
        val type = object : TypeToken<List<Bonus>>() {

        }.type
        return gson.fromJson<ArrayList<HashMap<List<Bonus>,RoomEventsModel>>>(bonusElements, type)
    }
}

我将TypeConverter添加到我的AppDatabase类中

 @TypeConverters(value = [Converters::class])
abstract class AppDatabase : RoomDatabase() {
    ...
}

编译说我:

类被引用为转换器,但是它没有任何转换器方法。

代码有什么问题?

android kotlin android-sqlite typeconverter
1个回答
1
投票

您的toBonusList(...)方法必须在List<Bonus>类中返回Converters,因为您将bonus_value作为List<Bonus>存储在数据类中。

类型转换器必须具有相应的toSomeValue()fromSomeValue()方法,其中to方法中的参数与from方法的返回值相对应,反之亦然。

此外,请尝试将@JvmStatic添加到Converters类中的每个方法中。

@TypeConverter
@JvmStatic
    fun toBonusList(bonusElements: String?): List<Bonus> {
        if (bonusElements == null) {
            return null
        }
        val gson = Gson()
        return gson.fromJson(bonusElements, Array<Bonus>::class.java).asList()
    }
© www.soinside.com 2019 - 2024. All rights reserved.