Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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
如果不在RxJava2中处理,我如何停止观察一个可观察对象?_Java_Rx Java_Rx Java2_Dispose - Fatal编程技术网

如果不在RxJava2中处理,我如何停止观察一个可观察对象?

如果不在RxJava2中处理,我如何停止观察一个可观察对象?,java,rx-java,rx-java2,dispose,Java,Rx Java,Rx Java2,Dispose,我对RxJava2有一个不寻常的问题 基本上,我们有以下情况: 用户拍摄照片,然后按next启动网络请求 网络请求完成后,将执行ViewModel中的方法,该方法将触发UI操作 用户可以在任何时候按下后退按钮,这将重新启动流,即使前一张照片上传成功,也不会触发任何操作。 现在,我通常会将所有代码放在CompositeDisposable中,并根据具体情况调用clear或dispose。按下“后退”按钮后,将停止观察上传的照片 但是,在这种情况下,我不能调用clear或dispose,因为它将终止

我对RxJava2有一个不寻常的问题

基本上,我们有以下情况:

用户拍摄照片,然后按next启动网络请求 网络请求完成后,将执行ViewModel中的方法,该方法将触发UI操作 用户可以在任何时候按下后退按钮,这将重新启动流,即使前一张照片上传成功,也不会触发任何操作。 现在,我通常会将所有代码放在CompositeDisposable中,并根据具体情况调用clear或dispose。按下“后退”按钮后,将停止观察上传的照片

但是,在这种情况下,我不能调用clear或dispose,因为它将终止网络请求!照片通常为1-2MB,通过调用dispose,它将终止网络请求。。。 如何停止观察以前的流,只观察将来的上载,而不终止以前的上载


我知道应该有某种方式来通知我的观察者用户按下了后退按钮,但我所有的尝试似乎都不干净。我想学习一种正确的处理这种情况的方法。

我认为正确的方法是使用take,直到您取消当前的上传并在此时完成。然后,您需要使用repeat再次重新订阅,以便将来上传

大概是这样的:

compositeDisposable += nextButtonClicked
        .firstOrError()
        .flatMapCompletable {
          networkUpload.takeUntil(backButtonClicked).ignoreElements()
        }.repeat().subscribe()

我想你需要这里的地图。你们可以阅读文章@borichellow,我想到了switchMap,但不知道我能不能以这样的方式构造,dispose不会清除SubscribtionThank。你的意思是我应该将某个主题传递到takeUntil参数中,当我需要停止观察上传时会触发该参数?正确,你需要一种停止上传的方法。例如,当按下用户界面中的“取消”按钮时,就会触发该主题。但我不想停止上传。。。我需要停止观察上传文件的响应,而不是终止网络请求。在Rx中没有停止观察的事情,你要么订阅了,要么取消了订阅。如果要忽略给定的已取消上载的响应,则必须在从上载获得响应后进行筛选,以确定是否要处理该响应。