Как изменить TypeConverter, чтобы я мог анализировать сложные данные в комнате с kotlin - PullRequest
0 голосов
/ 07 марта 2020

У меня есть такой объект данных, который я использую для сохранения данных в столбце в Room.

data class MyObject(val list1: List<String>)

Так что, если класс данных имеет эти данные MyObject (listOf (“A”, ”) B ”,” C ”))

Данные для этого столбца будут сохранены следующим образом в столбце # 1

enter image description here

Сейчас Мне нужно добавить данные к этому объекту и, следовательно, к столбцу, новый объект выглядит следующим образом

data class MyObject(val list1: List<String>,
                         val list2: List<String>,
                         val list3: List<String>,
                         val isEnabled: Boolean,
                         val isDone: Boolean)

Я не знаю, как изменить TypeConverter, чтобы я мог анализировать сложные данные, текущий конвертер это

class MyObjectConverter {

    @TypeConverter
    fun stringToMyObject (value: String?): MyObject? {
        return value?.let {
            MyObject (it.split(","))
        }
    }

    @TypeConverter
    fun myObjectToString(myObject: MyObject?): String? {
        return myObject?.value?.joinToString(",")
    }
}

1 Ответ

0 голосов
/ 07 марта 2020

Конвертер должен быть для List<String>, а не для MyObject, таким образом, комната будет использовать конвертер только для полей, которые не могут сохраняться вне коробки. конвертер будет выглядеть следующим образом:

class MyListConverter {

    @TypeConverter
    fun stringToList (value: String?): List<String>? {
        return value?.split(",")
    }

    @TypeConverter
    fun listToString(list: List<String>?): String? {
        return list?.joinToString(",")
    }
}

используйте это с MyObject сущностью комнаты, и он будет использоваться для первых трех полей в MyObject, тогда как другие два поля Boolean могут обрабатываться по комнате.

...