首页 > 解决方案 > 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())
}

标签: androiddatabasekotlinandroid-roomrx-java2

解决方案


Disposable您从订阅中分配一个:

 val disposable: Disposable = getAllUsers().subscribeOn(io()).subscribe { users ->
            users.forEach { deleteUser(it) }
        }

当您不想再收到任何更新或课程的生命周期结束时,您可以:

disposable.dispose()

推荐阅读