我的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() {
...
}
编译说我:
类被引用为转换器,但是它没有任何转换器方法。
代码有什么问题?
您的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()
}