У меня есть объект, в котором одно из полей имеет тип 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
?