Как отменить звонок с RxJava2? - PullRequest
0 голосов
/ 11 ноября 2018

Я использую RxJava2 и Retrofit. В своем фрагменте я делаю запрос на загрузку локального файла:

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

Затем очистите все одноразовые материалы в onDestroyView()

@Override
public void onDestroyView() {
    mCompositeDisposable.clear();
    super.onDestroyView();
}

Но я использую Чарльз , чтобы просмотреть все запросы и обнаружил, что запрос все еще выполняется после того, как я закончу фрагмент . Файл все еще успешно загружен через некоторое время .

Как я могу отменить звонок, когда фрагмент закрыт?

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018
  1. Определить одноразовые

    private io.reactivex.disposables.Disposable mDisposable;

  2. назначить к вашим услугам

    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) {
    
                    }
                });
    
  3. вызов ниже линии, чтобы отклонить / прекратить текущий вызов API

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

Вот, пожалуйста.

UPDATE

в вашем случае должно быть

@Override
public void onDestroyView() {
if (mCompositeDisposable!= null) // in case if you required-> if (mCompositeDisposable!= null && !mCompositeDisposable.isDisposed())
      mCompositeDisposable.dispose(); 
super.onDestroyView();
}
0 голосов
/ 13 ноября 2018

Добавление RxJava к CompositeDisposable Тогда в onStop () использовать одноразовые RxJava.dispose ()

0 голосов
/ 11 ноября 2018

используйте disposable.dipose() для отмены вашего звонка.

...