通过DAO方法返回Map对象

时间:2018-09-01 11:51:56

标签: android kotlin android-room

我想在我的dao对象中拥有这样的方法

@Query("SELECT c.name, sum(p.value) FROM payments p, paymentCategories c WHERE p.categoryId = c.id GROUP BY c.name")
fun getCategoryStats(): Map<String, Float>

但是我得到了错误

  

错误:不确定如何将游标转换为此方法的返回类型       公共抽象java.util.Map

是否可以将其更改为工作版本?

因此返回的类型可以不同,但​​主要条件是

  1. 它只能是db中的一个查询
  2. 我想避免额外的代码,例如仅为此方法创建额外的数据结构

1 个答案:

答案 0 :(得分:0)

虽然我不认为这可以在Dao中完成,但是在使用转换查询存储库或viewModel(或您要查询列表的任何地方)中的LiveData时可以轻松完成。由于我不知道您的数据名称,因此我使用了组合名称:

val categoryStatsMap: LiveData<Map<String, Float>> = 
    Transformations.map(
        database.categoryStatsDao.getCategoryStats()) {it ->
            it.map {it.key to it.value}.toMap()
}

“ it.key”和“ it.value”是实体对象中要用作...映射中的键和值对的字段。 转换为您提供了基于另一个实时数据对象的实时数据对象。我不知道开销是多少,但我认为它应该不会太大。