retrofit2设置超时_Android-Retrofit-超时-重试-缓存-拦截器

0. Thanks To

1.超时

通过 OkHttpClient.Builder 去设置。

OkHttpClient client = new OkHttpClient.Builder()

.connectTimeout(10, TimeUnit.SECONDS)

.readTimeout(20, TimeUnit.SECONDS)

.writeTimeout(20, TimeUnit.SECONDS)

.build();

传入builder设置:

Retrofit retrofit = new Retrofit.Builder()

.baseUrl("xxx") //设置网络请求的Url地址

.addConverterFactory(GsonConverterFactory.create()) //设置数据解析器

.client(client)

.build();

2.重试

通过Client设置重试,重试一次。

OkHttpClient client = new OkHttpClient.Builder()

.retryOnConnectionFailure(true)//默认重试一次,若需要重试N次,则要实现拦截器。

.connectTimeout(10, TimeUnit.SECONDS)

.readTimeout(20, TimeUnit.SECONDS)

.writeTimeout(20, TimeUnit.SECONDS)

.build();

Retrofit retrofit = new Retrofit.Builder()

.baseUrl("xxx") //设置网络请求的Url地址

.addConverterFactory(GsonConverterFactory.create()) //设置数据解析器

.client(client)

.build();

以上的重试只能重试一次,若需要重试N次,可以通过设置拦截器

/**

* 自定义的,重试N次的拦截器

* 通过:addInterceptor 设置

*/

public static class Retry implements Interceptor {

public int maxRetry;//最大重试次数

private int retryNum = 0;//假如设置为3次重试的话,则最大可能请求4次(默认1次+3次重试)

public Retry(int maxRetry) {

this.maxRetry = maxRetry;

}

@Override

public Response intercept(@NonNull Chain chain) throws IOException {

Request request = chain.request();

Response response = chain.proceed(request);

Log.i("Retry","num:"+retryNum);

while (!response.isSuccessful() && retryNum < maxRetry) {

retryNum++;

Log.i("Retry","num:"+retryNum);

response = chain.proceed(request);

}

return response;

}

}

当在有网络的情况下,网络是畅通的,但获取失败后,那么会跑以上的拦截了,重新尝试N次。

3.缓存

设置缓存的的两种方式

1) 通过添加 @Headers("Cache-Control: max-age=120") 进行设置。添加了Cache-Control 的请求,retrofit 会默认缓存该请求的返回数据一般来说,这种方法是针对特定的API进行设置。

@Headers("Cache-Control:public,max-age=120")

@GET("mobile/active")

Call getActive(@Query("id") int activeId);

这样我们就通过@Headers快速的为该api添加了缓存控制。120s内,缓存都是生效状态,即无论有网无网都读取缓存。

2)通过Interceptors实现缓存。

这两者实现原理一致,但是适用场景不同。通常是使用Interceptors来设置通用缓存策略,而通过@Header针对某个请求单独设置缓存策略。另外,一定要记住,retrofit 2.0底层依赖OkHttp实现,这也就意味着retrofit缓存的实现同样是借助OkHttp来的。另外

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值