残りのAPIがあります。
@Get("/serveraction")
public Observable<String> myRequest(@Query("Data") String data);
Okhttpにはキャンセル機能(リクエストオブジェクト、タグ別)があることは知っていますが、retrofitやrxjavaでそれを使用する方法がわかりません。レトロフィットとrxjavaを使用してネットワークタスクのキャンセルメカニズムを実現する最良の方法は何ですか?
標準のRxJava2キャンセルメカニズム Disposable を使用できます。
Observable<String> o = retrofit.getObservable(..);
Disposable d = o.subscribe(...);
// later when not needed
d.dispose();
Retrofit RxJava呼び出しアダプタは、これをokHttpのキャンセルにリダイレクトします。
選択された答えはRx Java 1の場合であり、RxJava2の場合は無効です。後者の場合は、Disposableを使用できます。これに従ってください:
Activity
またはFragment
のフィールドとしてCompositeDisposable compositeDisposable=new CompositeDisposable()
を定義します。次のようにRetrofit 2を使用してAPIを定義します。
_public Observable<YourPojo> callApiWithRetrofit() {
return getService(YourApiService.class).callApi();
}
_
Disposable
を定義し、compositeDisposable
インスタンスに追加します。
_Disposable disposable = callApiWithRetrofit().subscribeOn(Schedulers.io()).observeOn(
AndroidSchedulers.mainThread()).subscribeWith(
new DisposableObserver<List<YourPojo>>() {
@Override
protected void onStart() {
super.onStart();
}
@Override
public void onNext(@NonNull List<AlertAssetDTO> listResponse) {
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
mCompositeDisposable.add(alertAssetsDisposable);
_
接続をキャンセルしたい場所(たとえば、Activity
のonDestroy()
メソッドまたはFragment
のonDestroyView()
)でmCompositeDisposable.clear();を呼び出します。
この方法で、複数の使い捨て部品をCompostieDisposableに追加できます。