我使用okhttp3和retrofit作为android项目请求框架,我有一个应用程序场景如下:
我们项目中有两个服务器有两个域;我们要做的是当连接到一个服务器失败然后我们在一个请求中重新连接另一个服务器时,所以我们使用okhttp3拦截器,如下所示:
public Response intercept(Chain chain) {
Request request = chain.request();
Response response = chain.proceed(request);
int tryCount = 0;//retry times
int RetryCount = 3;
while (!response.isSuccessful() && tryCount <= RetryCount) {
String url = request.url().toString();
if (!Util.checkNULL(FirstIP) && !Util.checkNULL(SecondIP)) {
if (url.contains(FirstIP)) {//change url
url = url.replace(FirstIP, SecondIP);
} else if (url.contains(SecondIP)) {
url = url.replace(SecondIP, FirstIP);
}
Request newRequest = response.request().newBuilder().url(url).build();//recreate request
tryCount++;//add request count
response = chain.proceed(newRequest);//retry the request
} else {
response = chain.proceed(request);
}
}
return response;
}
但是这句话有错误:
响应响应= chain.proceed(request);
当网址无法连接时,这句话会抛出异常,所以这不会使重试按预期工作,有没有解决方法呢?提前谢谢!