【问题标题】:Cancel all request by retrofit2通过改造2取消所有请求
【发布时间】:2016-12-08 17:22:18
【问题描述】:

我让一个应用程序使用 youtube API。我首先使用Retrofit 加载列表视频,然后我继续使用Retrofit 加载列表中视频的所有信息。

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

我知道 Callcancel() 功能来取消请求。我可以通过将所有 Call 放入堆栈并为每个 Call 调用 cancel() 来取消所有请求。

还有更好的解决方案吗?

【问题讨论】:

标签: android retrofit2


【解决方案1】:

假设我有

 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();

【讨论】:

  • dispatcher如何取消已经发布的请求,会有回调执行。正如我使用调度程序 onStop() 来取消请求但正在运行的请求一样。但是网络慢。发布的请求仍然被称为回调并导致一些异常。
猜你喜欢
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 2018-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多