Получение поля типа списка из сущности в комнате - PullRequest
1 голос
/ 03 апреля 2019

У меня есть объект, в котором одно из полей имеет тип List<String>.Затем я хочу получить это конкретное поле списка из запроса Dao .Однако полученный результат не является ожидаемым, как показано ниже:

Entity:

@Entity
data class MyModel(@PrimaryKey val id: String,
                   val listField: List<String>)

У меня есть TypeConverter для поддержки типа List в Room следующим образом:

@TypeConverter
fun stringToList(value: String): List<String>? {
    val type = object : TypeToken<List<String>>() {}.type
    return Gson().fromJson<List<String>>(value, type)
}

@TypeConverter
fun listToString(list: List<String>): String {
    return Gson().toJson(list)
}

Наконец, у меня есть Дао со следующими запросами:

@Dao
interface MyDao {

    @Insert
    fun insert(model: MyModel)

    @Query("SELECT * FROM MyModel WHERE id = :id")
    fun getMyModel(id: String): MyModel?

    @Query("SELECT listField FROM MyModel WHERE id = :id")
    fun getListField(id: String): List<String>?
}

Получены следующие результаты:

val myModel = MyModel("myId", listOf("item1", "item2"))

myDao.insert(myModel)

val retrievedModel = myDao.getMyModel("myId") //Returns correct model - Correct

val listField = myDao.getListField("myId") //Returns ["[item1, item2]"] - Wrong

Итак, при попытке получить listField вместо возврата фактического списка он возвращает список, содержащий строковую версию значения listField .

Возможно ли получить нужное поле списка в Room?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...