从会议室中的实体中检索列表类型字段

时间:2019-04-03 12:11:46

标签: android android-room

我有一个实体,其中的一个字段为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中检索所需的列表字段?

0 个答案:

没有答案