我有一个实体,其中的一个字段为List<String>
类型。然后,我想从 Dao 的查询中检索特定的列表字段。但是,获得的结果不是预期的结果,如下所示:
实体:
@Entity
data class MyModel(@PrimaryKey val id: String,
val listField: List<String>)
我有一个TypeConverter
支持Room
中的 List 类型,如下所示:
@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 ,其中包含以下查询:
@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
中检索所需的列表字段?