Mar*_*arr 7 android android-room android-architecture-components
我有一个名为Chacara的类,它有各种属性,包括thumbList,它是一个List <String>
将它保存到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)
}
}
Run Code Online (Sandbox Code Playgroud)
当我获取整个对象并访问thumbList属性时,它按预期工作:
@Query("SELECT * FROM chacara WHERE id = :id LIMIT 1")
abstract fun getChacaraWithId(id: String): LiveData<Chacara>
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试仅获取thumbList属性时,结果不会转换:
@Query("SELECT thumbUrlList FROM chacara WHERE id = :id")
abstract fun getChacaraThumbList(id: String): LiveData<List<String>>
Run Code Online (Sandbox Code Playgroud)
我还在TypeConverter中添加了一个日志,以确保它没有被调用.
TL; DR:ROOM不调用TypeConverter而不将String转换回List(SELECT'column_name'),但在请求整个对象时工作(SELECT*)
我的查询也有同样的问题。我想选择一个日期,但没有成功。
@Query("SELECT MAX(downloadDate) FROM table WHERE key=:key")
abstract fun selectMaxDownloadDateByKey(key: String): Date?
Run Code Online (Sandbox Code Playgroud)
Room 不知道 downloaddate 需要转换为 Date。所以我将查询更改如下:
@Query("SELECT MAX(downloadDate) as Date FROM table WHERE key=:key")
abstract fun selectMaxDownloadDateByKey(key: String): Date?
Run Code Online (Sandbox Code Playgroud)
它有效。
因此尝试将您的查询更改为:
@Query("SELECT thumbUrlList as String FROM chacara WHERE id = :id")
abstract fun getChacaraThumbList(id: String): LiveData<List<String>>
Run Code Online (Sandbox Code Playgroud)
我希望它可以与 LiveData 一起使用并列出结果
| 归档时间: |
|
| 查看次数: |
417 次 |
| 最近记录: |