android - Android rxJava 2 完成任务后如何取消订阅
问题描述
我有从我的房间数据库中删除所有用户的代码。为此,我正在使用 rxJava 2。问题是我订阅接收所有用户,毕竟删除所有用户,但我不知道如何取消订阅再次接收有关用户的信息。
fun deleteUser(user: User) {
Completable.fromAction {
appRepository.deleteUser(user);
appRepository.deleteByUser(user.userName)
objectiveActionManager.saveObjective(null)
profileActionManager.saveProfile(null)
}.subscribeOn(io()).subscribe()
}
fun deleteAllUsers() {
getAllUsers().subscribeOn(io()).subscribe { users ->
users.forEach { deleteUser(it) }
}
}
fun getAllUsers(): Observable<List<User>> {
return appRepository.getAllUsers()
.observeOn(AndroidSchedulers.mainThread())
}
解决方案
Disposable
您从订阅中分配一个:
val disposable: Disposable = getAllUsers().subscribeOn(io()).subscribe { users ->
users.forEach { deleteUser(it) }
}
当您不想再收到任何更新或课程的生命周期结束时,您可以:
disposable.dispose()
推荐阅读
- c# - 绑定属性仅在代码中更新,而不在 UI 中更新
- javascript - 对象作为 React 子对象无效(找到:带有键 {username} 的对象)
- post-redirect-get - 如果您提交 HTML 片段,则需要发布/重定向/获取?
- wpf - WPF Update count of item when button is pushed
- powershell - 用于从组的文本文件中获取名称、职务、部门、经理姓名和经理电子邮件的 Powershell 脚本
- c - 在 C 中扫描不同的数据类型
- angular - 升级到 firebase js sdk v8 后,在“firebase”中找不到导出“firestore”(导入为“firebase”)
- c++ - 调整抽象类中嵌套类对象的向量大小
- html - 是否可以将图像放置在不影响滚动条的窗口边缘?
- mysql - 如何编写一个对行进行分组的 sql 查询,然后对其中一列进行一些计算?