Зал библиотеки Typeconverter не работает в Kotlin - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь реализовать TypeConverter, но получаю эту ошибку:

Не могу понять, как сохранить это поле в базе данных. Вы можете добавить для него конвертер типов.

Это класс данных:

@Entity
data class SubEmergencyData (

    @PrimaryKey
    var title: String,

    @ColumnInfo (name = "image")
    var image: String,

    @TypeConverters(StepsConverters::class)
    @ColumnInfo (name = "steps")
    var steps: ArrayList<Stepdata>
) {

}

А это мой TypeConverter:

class StepsConverters {

    @TypeConverter
    fun toStepDataList(optionValuesString: String?): ArrayList<Stepdata>? {
        if (optionValuesString == null) {
            return null
        }
        val gson = Gson()
        val type = object : TypeToken<ArrayList<Stepdata?>?>() {}.type
        return gson.fromJson<ArrayList<Stepdata>>(optionValuesString, type)
    }

    @TypeConverter
    fun fromStepData(optionValues: ArrayList<Stepdata?>?): String? {
        if (optionValues == null) {
            return null
        }
        val gson = Gson()
        return gson.toJson(optionValues)
    }
}

Вот Stepdata

@Entity
data class Stepdata (@PrimaryKey var num : Int,
                     @ColumnInfo (name = "title") var title: String,
                     @ColumnInfo (name = "content") var content : String,
                     @ColumnInfo (name = "image")var image: String) {
}

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Сохранение ArrayList<Stepdata> как String не может быть запрошено, а доступно только через SubEmergencyData. Если эти данные должны быть доступны для запроса, используйте отношение один-ко-многим .

0 голосов
/ 01 февраля 2020

Я думаю, это потому, что вы написали ArrayList<Stepdata?>? в fun fromStepData. Попробуйте изменить ArrayList<Stepdata?>? на ArrayList<Stepdata>?

...