【发布时间】:2016-08-15 16:45:09
【问题描述】:
我使用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);
这句话会在url无法连接的时候抛出异常,所以这不会让重试按预期工作,有什么解决方法吗?提前谢谢!
【问题讨论】: