我有休息api。
@Get("/serveraction")
public Observable<String> myRequest(@Query("Data") String data);
我知道,okhttp已取消功能(通过请求对象,按标签),但不知道如何使用它与改造和rxjava。使用改造和rxjava实现网络任务取消机制的最佳方法是什么?
答案 0 :(得分:24)
您可以使用标准的RxJava2取消机制Disposable。
Observable<String> o = retrofit.getObservable(..);
Disposable d = o.subscribe(...);
// later when not needed
d.dispose();
Retrofit RxJava调用适配器会将此重定向到okHttp的取消。
答案 1 :(得分:3)
所选答案适用于Rx Java 1,对RxJava2无效。对于后者,您可以使用Disposable。请遵循:
CompositeDisposable compositeDisposable=new CompositeDisposable()
定义为Activity
或Fragment
中的字段。使用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);
您希望取消连接的任何位置(例如,onDestroy()
的{{1}}或Activity
onDestroyView()
来电
mCompositeDisposable.clear();
可以通过这种方式将多个一次性物品添加到CompostieDisposable中。