Android 从文件室中的实体检索列表类型字段

Android 从文件室中的实体检索列表类型字段,android,android-room,Android,Android Room,我有一个实体,其中一个字段是List类型。然后,我想从Dao的查询中检索特定的列表字段。然而,获得的结果并非预期结果,如下所示: 实体: @Entity data class MyModel(@PrimaryKey val id: String, val listField: List<String>) 最后,我有一个带有以下查询的Dao: @Dao interface MyDao { @Insert fun insert(m

我有一个实体,其中一个字段是
List
类型。然后,我想从Dao的查询中检索特定的列表字段。然而,获得的结果并非预期结果,如下所示:

实体:

@Entity
data class MyModel(@PrimaryKey val id: String,
                   val listField: List<String>)
最后,我有一个带有以下查询的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>?
}
因此,当尝试检索listField时,它会返回一个包含listField值的字符串版本的列表,而不是返回实际列表


是否可以在
文件室
中检索所需的列表字段?

为什么不使用
MyModel
对象的
列表字段
字段?@OID是的,我可以检索整个模型,然后使用模型的列表字段。然而,我只是想知道为什么仅仅检索listField根本不起作用。如果是由于任何房间的限制或其他原因,我认为应该可以这样做。所以这只是为了理解它不起作用的原因。@jeelvankhed是的,否则我将无法在第一时间检索整个模型query@JeelVankhede这没什么区别。但是,即使没有
@JvmStatic
也可以访问,否则它将不允许我插入或检索整个模型,因为它不知道如何存储列表类型好的,请尝试在
listToString()中提供
TypeToken
。为什么不使用
MyModel
对象的
listField
字段?@是的,我可以检索整个模型,然后使用模型的listField。然而,我只是想知道为什么仅仅检索listField根本不起作用。如果是由于任何房间的限制或其他原因,我认为应该可以这样做。所以这只是为了理解它不起作用的原因。@jeelvankhed是的,否则我将无法在第一时间检索整个模型query@JeelVankhede这没什么区别。但是,即使没有
@JvmStatic
也可以访问,否则它将不允许我插入或检索整个模型,因为它不知道如何存储列表类型好的,请尝试在
listToString()中提供
TypeToken
@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