通过改进2取消所有请求
问题描述:
我让应用程序使用youtube API。首先我使用Retrofit
加载列表视频,然后我继续使用Retrofit
加载列表中的所有视频信息。通过改进2取消所有请求
因为listview
支持刷新和加载更多我需要cancel
所有请求召回。
我知道致电有cancel()
函数取消请求。我可以取消所有请求,将所有拨打电话到一个堆栈和调用cancel()
每个拨打。
有没有更好的解决方案?
答
假设我有
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
OkHttpClient client = httpClient.addInterceptor(interceptor).build();
Retrofit.Builder builder =
new Retrofit.Builder()
.baseUrl("MY URL")
.client(new OkHttpClient.Builder().addInterceptor(interceptor).build())
.addConverterFactory(GsonConverterFactory.create());
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
现在用Dispatcher
创建服务,并设置为Retrofit
Dispatcher dispatcher=new Dispatcher();
dispatcher.setMaxRequests(totalRequest);
httpClient.dispatcher(dispatcher);
Retrofit retrofit = builder.client(client).build();
Service servicee = retrofit.create(serviceClass)
,并从任何地方
dispatcher.cancelAll();
+0
调度器如何取消已发布的请求,并且会执行回调。由于我使用调度员onStop()取消请求,但正在运行的请求。但在慢速网络上。发布的请求仍被称为回调并导致一些异常。 – Killer
[http://stackoverflow.com只需调用/questions/34367910/retrofit-2-okhttp-cancel-all-running-requests](http://stackoverflow.com/questions/343679 10/retrofit-2-okhttp-cancel-all-running-requests) –
我读了这个主题。但我不知道'retrofit.client()。cancel(...)',找不到函数。 – phongvan
在那个线程已经说过使用'dispatcher'为此becoz我检查'dispatcher'有'cancelAll();'方法 –