我有休息api。如何取消任务与改造和rxjava
@Get("/serveraction")
public Observable<String> myRequest(@Query("Data") String data);
我知道,那okhttp已取消的功能(通过请求对象,按标签),但不知道如何与改造和rxjava使用它。使用改进和rxjava实现取消网络任务机制的最佳方法是什么?
我有休息api。如何取消任务与改造和rxjava
@Get("/serveraction")
public Observable<String> myRequest(@Query("Data") String data);
我知道,那okhttp已取消的功能(通过请求对象,按标签),但不知道如何与改造和rxjava使用它。使用改进和rxjava实现取消网络任务机制的最佳方法是什么?
您可以使用标准的RxJava取消机制Subscription。
Observable<String> o = retrofit.getObservable(..);
Subscription s = o.subscribe(...);
// later when not needed
s.unsubscribe();
Retrofit RxJava连接器会将此呼叫重定向到okHttp的取消。请参阅:https://github.com/square/retrofit/blob/master/retrofit-adapters/rxjava/src/main/java/retrofit2/RxJavaCallAdapterFactory.java#L102
所选答案适用于Rx Java 1,且不适用于RxJava2。对于后者,您可以使用一次性使用。按照此:
Activity
或类Fragment
定义CompositeDisposable compositeDisposable=new CompositeDisposable()
作为一个字段。定义使用改造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()
方法Activity
或 Fragment
)请致电 mCompositeDisposable.clear();
多种一次性物品可以通过这种方式添加到CompostieDisposable中。
原始(v1)答案中最重要的部分是它实际上取消了请求:''Retrofit RxJava连接器将把这个调用重定向到okHttp的取消。看到这里:''..在这个答案中缺少(旧的链接现在被破坏) – minsk
供参考:我非常确定[ObservableCallAdapterFactory](https://github.com/square/retrofit/blob/master/retrofit-adapters/rxjava/src/main/java/retrofit/ObservableCallAdapterFactory.java)在改造-adpaters将成为尚未发布的Retrofit 2.0的一部分,目前不属于Retrofit 1.9的一部分。如上所述,通过@Sergii取消订阅仍然可以实现您的订阅者没有得到响应的效果,但是如何在内部取消它并不那么干净,并且您可能会看到一些线程中断的异常(但它们不会使您的应用程序崩溃)。 – Nick
链接已死 –
谢谢。更新。 –