首页 > 解决方案 > Room + Kotlin Flow 没有发出结果

问题描述

我正在尝试从 api 获取一些数据,并将它们存储在房间数据库中,所以主要数据源是 roomDatabase。

我的存储库代码如下所示:

 suspend fun fetchData(): Flow<Response<List<Foo>>> {
            val shouldRequestData = dao.getFoo().isEmpty()
            return if (shouldRequestData) {
                getFoo()
            } else getLocalFoo()
        }
    
        override suspend fun getFoo(): Flow<Response<List<Foo>>> {
    
            return ....... request done normally... inserting normally on database (and showing 
on database inspector)
        }
    
        override suspend fun getLocalFoo(): Flow<Response<List<Foo>>> = flow {
            dao.getFoo().transform<List<FooLocal>, Response<List<Foo>>> {
               Response.Success(
                   it.map {
                     it.toDomainModel()
                   }
               )
    }
}

关于道:

 @Query("SELECT * FROM localdb")
    fun getFoo(): Flow<List<Foo>>

然后在视图模型上正常收集它......

问题是:数据没有出现..我怎么能解决这个问题?非流版本有效:/我已经搜索过这个问题,但似乎没有任何效果。

标签: kotlinandroid-room

解决方案


通过将其放在 getLocalFoo() 上解决 ->

val result: Flow<Response<List<Foo>>> = 
     Transformations.map(dao.getFoo()) {
            Response.Success(it?.map {
                it.asDomainModel()
            } ?: emptyList()
        }.asFlow()

return result

推荐阅读