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