Android Room Type Converter仅在选择一列时不转换

时间:2017-10-25 23:35:41

标签: android android-room android-architecture-components

我有一个名为Chacara的类,它具有各种属性,包括thumbList,它是List<字符串>

将其保存到ROOM时,我使用Type Converter:

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 *)

1 个答案:

答案 0 :(得分:0)

我的查询遇到相同的问题。 我想选择一个日期,但没有用。

@Query("SELECT MAX(downloadDate) FROM table WHERE key=:key")
abstract fun selectMaxDownloadDateByKey(key: String): Date?

Room不知道将downloaddate转换为Date。 所以我将查询更改如下:

@Query("SELECT MAX(downloadDate) as Date FROM table WHERE key=:key")
abstract fun selectMaxDownloadDateByKey(key: String): Date?

它有效。

因此,尝试将查询更改为:

@Query("SELECT thumbUrlList as String FROM chacara WHERE id = :id")
abstract fun getChacaraThumbList(id: String): LiveData<List<String>>

我希望它可以与LiveData一起使用并列出结果