在我的存储库中,我可以按如下方式使用-6ren">
gpt4 book ai didi

android - 带有 Dao 和通用 Result 类的协程流

转载 作者:行者123 更新时间:2023-12-02 13:32:37 25 4
gpt4 key购买 nike

我有一个 Dao 类,它以流的形式返回 Car 对象列表。

@Query("SELECT * FROM Car")
fun getAllCars(): Flow<List<Car>>

在我的存储库中,我可以按如下方式使用这个 Dao
fun getAllCars(): Flow<List<Car>>
//Implementation
override fun getAllCars() = carDao.getAllCars()

我可以观察到 flow在 View 模型中,一切正常,生活很好。

现在,在阅读 Developer Android site 上的帖子后关于

包含有关加载此数据的数据和状态的通用类。

我得到了启发,所以我又读了一篇文章 here其中讨论了 Result 类。

所以,我对存储库做了一些更改,但我无法解决它们。

错误:

suspend fun getSomeData(): Flow<Result<List<Car>>> {
carDao.getAllCars().collect {
if (it.isNotEmpty()) {
return flowOf(Result.Success(it)) //<-- Here I am getting error from IDE
}
else {
val throwable = Throwable()
return flowOf(Result.Failure<List<Car>>(throwable)) //<-- Here I am getting error from IDE
}
}
}

错误是 Return is not allowed hereChange to 'return@Collect'
我想要实现的是:
// At view model side
viewmodelScope.launch {

repo.getSomeData().collect {
if (it == Result.Success) {
//Show data
}
else {
//Show empty screen
}

}
}

我执行 Result 的方法是错误的吗?我无法弄清楚出了什么问题。为什么我不能只从流中返回流

最佳答案

如果你想使用 Result,你应该返回 Result 。它看起来像这样:

        suspend fun getSomeData(): Result<Flow<List<Car>>> {
return carDao.getAllCars().collect {
if (it.isNotEmpty()) {
Result.Success(flowOf(it))
} else {
Result.Failure(Throwable()))
}
}
}

关于android - 带有 Dao 和通用 Result 类的协程流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60444808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com