房间+KotlinFlow未发出结果

zwghvu4y  于 2023-01-31  发布在  Kotlin
关注(0)|答案(2)|浏览(112)

我尝试从api中获取一些数据,它们存储在room数据库中,因此主要数据源是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>>

然后在ViewModel上正常收集。
问题是:数据没有出现..我该如何解决这个问题?非流版本工作:/我已经搜索了这个问题,但似乎没有工作。

6ovsh4lw

6ovsh4lw1#

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

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

return result
nue99wik

nue99wik2#

我已经找到了解决投入这么多时间的办法。
解决方案:当我们将详细信息插入房间数据库并从DB中获取信息时,应该使用相同的Dao对象。
如果你用的是剑柄
@Singleton注解将起作用。
我希望这能解决你的问题。

相关问题