【发布时间】:2018-04-07 04:53:49
【问题描述】:
我有一个名为 Chacara 的类,它具有各种属性,包括 thumbList,它是一个 List
将其保存到 ROOM 时,我使用类型转换器:
class DbTypeConverter {
@TypeConverter
fun listToString(list: List<String>): String = Gson().toJson(list)
@TypeConverter
fun stringToList(string: String): List<String> {
return Gson().fromJson<List<String>>(string, object: TypeToken<List<String>>() {}.type)
}
}
当我获取整个对象并访问 thumbList 属性时,它按预期工作:
@Query("SELECT * FROM chacara WHERE id = :id LIMIT 1")
abstract fun getChacaraWithId(id: String): LiveData<Chacara>
但是,当我尝试仅获取 thumbList 属性时,结果不会被转换:
@Query("SELECT thumbUrlList FROM chacara WHERE id = :id")
abstract fun getChacaraThumbList(id: String): LiveData<List<String>>
我还向 TypeConverter 添加了一个日志,以确保它没有被调用。
TL;DR:ROOM 不调用 TypeConverter 也不将 String 转换回 List(SELECT 'column_name'),但在请求整个对象时工作(SELECT *)
【问题讨论】:
-
我有同样的问题,我认为这是一个错误。我在这里提出了关于 Room 的 issuer tracker 的问题:issuetracker.google.com/issues/176448260
标签: android android-room android-architecture-components