我如何手动取消/处置 RXJava2 Flowable?

我有一个使用依赖于 RX Java 2的FileStack 依赖项io.reactivex.rxjava2:rxjava:2.1.2的 Android 项目。具体来说, . 直到现在这还不是真正的问题,因为我一直无法弄清楚如何具体取消Flowable

我已经实施了

下面是我的代码:

private Flowable<Progress<FileLink>> upload;


private void myMethod(){

    upload = new Client(myConfigOptionsHere)

      .uploadAsync(filePath, false, storageOptions);


        upload.doOnNext(progress -> {

                    double progressPercent = progress.getPercent();

                    if(progressPercent > 0){

                        //Updating progress here

                    }

                    if (progress.getData() != null) {

                        //Sending successful upload callback here

                    }

                })

                .doOnComplete(new Action() {

                    @Override

                    public void run() throws Exception {

                        //Logging he complete action here

                    }

                })

                .doOnCancel(new Action() {

                    @Override

                    public void run() throws Exception {

                        //Logging the cancel here

                    }

                })

                .doOnError(new Consumer<Throwable>() {

                    @Override

                    public void accept(Throwable t) throws Exception {

                        //Logging the error here

                    }

                })

                .subscribe();


}


public void cancelUpload(){

    //What do I do here to manually stop the upload Flowable? 

    //IE upload.cancel();

}

我需要做什么/调用uploadFlowable 以便在用户通过单击按钮取消上传时我可以手动触发取消?我看到有人建议调用dispose,但在检查可用于 Flowable 的可用方法时我没有看到该选项。


慕婉清6462132
浏览 82回答 1
1回答

隔江千里

原来问题是我试图处理/取消错误的对象。我将代码调整为以下内容:private Disposable disposable;private void myMethod(){&nbsp; &nbsp; Flowable<Progress<FileLink>> upload = new Client(myConfigOptionsHere)&nbsp; &nbsp; &nbsp; .uploadAsync(filePath, false, storageOptions);&nbsp; &nbsp; &nbsp; &nbsp; this.disposable = upload.doOnNext(progress -> {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; double progressPercent = progress.getPercent();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(progressPercent > 0){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Updating progress here&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (progress.getData() != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Sending successful upload callback here&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .doOnComplete(new Action() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void run() throws Exception {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Logging he complete action here&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .doOnCancel(new Action() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void run() throws Exception {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Logging the cancel here&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .doOnError(new Consumer<Throwable>() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void accept(Throwable t) throws Exception {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Logging the error here&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .subscribe();}public void cancelUpload(){&nbsp; &nbsp; if(this.disposable != null){&nbsp; &nbsp; &nbsp; &nbsp; this.disposable.dispose();&nbsp; &nbsp; &nbsp; &nbsp; this.disposable = null;&nbsp; &nbsp; }}并且能够让它正常工作。本质上,您需要dispose()针对对象调用方法dispose,而不是Flowable.感谢jschuss的帮助/留言
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java