2016-08-03 41 views
1

我让应用程序使用youtube API。首先我使用Retrofit加载列表视频,然后我继续使用Retrofit加载列表中的所有视频信息。通过改进2取消所有请求

因为listview支持刷新和加载更多我需要cancel所有请求召回。

我知道致电cancel()函数取消请求。我可以取消所有请求,将所有拨打电话到一个堆栈和调用cancel()每个拨打

有没有更好的解决方案?

+0

[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) –

+0

我读了这个主题。但我不知道'retrofit.client()。cancel(...)',找不到函数。 – phongvan

+0

在那个线程已经说过使用'dispatcher'为此becoz我检查'dispatcher'有'cancelAll();'方法 –

回答

3

假设我有

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