如何取消RxJava2的通话?

时间:2018-11-10 23:59:20

标签: android retrofit rx-java2

我正在使用RxJava2和Retrofit。在我的片段中,我请求上传本地文件:

# install ggbiplot package, if not already installed
#library(devtools)
#install_github("vqv/ggbiplot")

library(ggbiplot)
data(wine)
head(wine)
#  Alcohol MalicAcid  Ash AlcAsh  Mg Phenols Flav NonFlavPhenols Proa Color  Hue   OD Proline
#1   14.23      1.71 2.43   15.6 127    2.80 3.06           0.28 2.29  5.64 1.04 3.92    1065
#2   13.20      1.78 2.14   11.2 100    2.65 2.76           0.26 1.28  4.38 1.05 3.40    1050
#3   13.16      2.36 2.67   18.6 101    2.80 3.24           0.30 2.81  5.68 1.03 3.17    1185
#4   14.37      1.95 2.50   16.8 113    3.85 3.49           0.24 2.18  7.80 0.86 3.45    1480
#5   13.24      2.59 2.87   21.0 118    2.80 2.69           0.39 1.82  4.32 1.04 2.93     735
#6   14.20      1.76 2.45   15.2 112    3.27 3.39           0.34 1.97  6.75 1.05 2.85    1450

wine.pca <- prcomp(wine, scale. = TRUE)
print(ggbiplot(wine.pca, obs.scale = 1, var.scale = 1, groups = wine.class, ellipse = TRUE, circle = TRUE))

然后清除Disposable disposable = mApi.requestUpload(file) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(response -> { toast("success"); }, throwable -> { toast("failed"); }); mCompositeDisposable.add(disposable);

中的所有一次性用品
onDestroyView()

但是我使用 Charles 查看所有请求,并发现在我完成片段之后该请求仍在执行一段时间后,文件仍成功上传

片段关闭时如何取消通话?

3 个答案:

答案 0 :(得分:1)

使用int wins[13]; int loses[13]; 取消通话。

答案 1 :(得分:0)

  1. 定义一次性

    <?xml version="1.0" encoding="UTF-8"?> <?package de.mgo.temperaturstatistics.controller.Controller?> <?import javafx.scene.chart.CategoryAxis?> <?import javafx.scene.chart.LineChart?> <?import javafx.scene.chart.NumberAxis?> <?import javafx.scene.control.Label?> <?import javafx.scene.layout.BorderPane?> <?import javafx.scene.text.Font?> <BorderPane xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.mgo.temperaturstatistics.view.DailySceneController"> <top> <Label fx:id="titleDaily" text="Temperatur-Statistik Tagesansicht" BorderPane.alignment="CENTER"> <font> <Font name="System Bold" size="18.0" /> </font> </Label> </top> <center> <LineChart fx:id="dailyChart" prefHeight="300.0" prefWidth="500.0" BorderPane.alignment="CENTER"> <xAxis> <CategoryAxis fx:id="xDaily" animated="false" label="Uhrzeit" side="BOTTOM" /> </xAxis> <yAxis> <NumberAxis fx:id="yDaily" animated="false" autoRanging="false" label="Temperatur" lowerBound="10.0" side="LEFT" tickLabelGap="1.0" tickUnit="1.0" upperBound="30.0" /> </yAxis> </LineChart> </center> </BorderPane>

  2. 分配给您的服务

    private  io.reactivex.disposables.Disposable mDisposable;
  3. 在行下方调用以取消/终止正在进行的API调用

    mService.getResults(query)
                .observeOn(AndroidSchedulers.from(Looper.getMainLooper(), true))
                .subscribeOn(Schedulers.io())
                .subscribe(new SingleObserver<Response<Model>>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        /* required */
                        mDisposable = d;
                    }
    
                    @Override
                    public void onSuccess(Response<Model> response) {
                        dismissProgress();
                    }
    
                    @Override
                    public void onError(Throwable e) {
    
                    }
                });
    

你去了。

更新

您的情况应该是

 if (mDisposable != null)
    mDisposable.dispose(); 

答案 2 :(得分:0)

将RxJava添加到CompositeDisposable 然后在onStop() 使用一次性RxJava.dispose()