參考鏈接: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次。