参考链接:https://www.jianshu.com/p/ea2055db3dd3
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次。