Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android rxJava 2完成任务后如何取消订阅_Android_Database_Kotlin_Android Room_Rx Java2 - Fatal编程技术网

Android rxJava 2完成任务后如何取消订阅

Android rxJava 2完成任务后如何取消订阅,android,database,kotlin,android-room,rx-java2,Android,Database,Kotlin,Android Room,Rx Java2,我有从我的房间数据库中删除所有用户的代码。为此,我使用的是rxjava2。问题是,我订阅接收所有用户,毕竟删除了所有用户,但我不知道如何取消订阅,不再接收有关用户的信息 fun deleteUser(user: User) { Completable.fromAction { appRepository.deleteUser(user); appRepository.deleteByUser(user.userName) objective

我有从我的房间数据库中删除所有用户的代码。为此,我使用的是rxjava2。问题是,我订阅接收所有用户,毕竟删除了所有用户,但我不知道如何取消订阅,不再接收有关用户的信息

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())
}
fun deleteUser(用户:用户){
可完成的动作{
appRepository.deleteUser(用户);
appRepository.deleteByUser(user.userName)
objectiveActionManager.saveObjective(空)
profileActionManager.saveProfile(空)
}.subscribeOn(io()).subscribe()
}
乐趣{
getAllUsers().subscribeOn(io()).subscribe{users->
users.forEach{deleteUser(it)}
}
}
fun getAllUsers():可观察{
return appRepository.getAllUsers()返回
.observeOn(AndroidSchedulers.mainThread())
}

您可以从订阅中分配一个
一次性

 val disposable: Disposable = getAllUsers().subscribeOn(io()).subscribe { users ->
            users.forEach { deleteUser(it) }
        }
当您不想再收到任何更新或类的生命周期结束时,请执行以下操作:

disposable.dispose()

不要在这些方法中订阅,让调用方处理订阅。关键是这种支持与生命周期无关。我只需要获取所有用户,删除他们并调用disposable.dispose(),但我不知道如何确定在什么时候调用disposable.dispose()@destructor,这一点现在很困难,因为您的存储库返回一个可观察的,它可能会无休止地返回用户列表。如果它返回了一个单一的,你甚至不必在意,只需获取用户并删除他们。如果你不能改变这一点,我会在第一次发布用户后取消脚本,这是在subscribe子句中删除用户的地方。