android - 有没有办法将 Flow 传递给 Room DAO Query 方法?
问题描述
我正在一个 android 应用程序中实现 Room,我有一个用例,我收到一个带有当前用户 ID 的流,其功能类似于切换哪个登录的谷歌用户来查看服务。我想将该流传递给我的 DAO 中的 @Query 注释方法以获取用户小部件,以便如果当前选择的用户更改或存储的小部件列表发生更改,输出 Flow<List> 也会更改。
就像是
WidgetRepo.kt
val widgets: Flow<List<Widget>> = widgetDAO.getWidgetsByUser(currentUserID)
WidgetDao.kt
@Query("select * from widget where userID = :userID")
fun getWidgetsByUser(userID: Flow<Int>): Flow<List<Widget>>
解决方案
我认为这不是一个好习惯。我宁愿在特定用例中执行以下逻辑,例如:
class GetWidgetsByUserUseCase(
private val userRepo: UserRepository,
private val widgetLocalSource: WidgetRepository
){
suspend operator fun invoke() = userRepo.flatMapLatest { user ->
widgetLocalSource.getWidgetsByUser(user.id)
}
}
使用此实现,每次发出新用户时,widgetLocalSource.getWidgetsByUser()
都会触发并取消先前的流程。
有关运算符的更多信息,请参阅flatMapLatest。
推荐阅读
- sql - Oracle SQL 比较字符串并找到匹配的子字符串
- c# - 如何访问自定义类型通用列表中的变量?
- javascript - 在 React 中将 refs 从组件传递到组件
- pine-script - 寻找一种方法来限制 Tradingview 仅在当天绘制前一天的高点、低点线
- variables - 在“with”语句中创建对象而不使用变量
- python - 尝试反转字符串列表会给出单个字符
- javascript - 如何在函数中传递参数并在调用函数时将该参数定义为变量?
- scala - 如何获取结构化流中的记录数?
- sql - 如何从扩展名应仅为 .jpg 的列中获取值?
- jenkins - Jenkins 没有在成功的 github webhook 上触发管道构建