내 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)
}
}
내 AppDatabase 클래스에 TypeConverter를 추가했습니다.
@TypeConverters(value = [Converters::class])
abstract class AppDatabase : RoomDatabase() {
...
}
컴파일하면 다음과 같이 말합니다.
클래스는 변환기로 참조되지만 변환기 메소드가 없습니다.
코드에 어떤 문제가 있습니까?
귀하의 toBonusList(...)
방법을 반환해야 List<Bonus>
당신에 Converters
당신이 저장되기 때문에 클래스 bonus_value
A와 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()
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다