I 설정 :Retrofit2 지정해 SocketTimeoutException
builder = new OkHttpClient.Builder()
.cookieJar(new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(Apploader.context)))
.addNetworkInterceptor(interceptor)
.addInterceptor(interceptor)
.cache(cache)
.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
언젠가는 서버 응답이 너무 오래 내 응용 프로그램 충돌
그것은 라인에서 휴식 SocketTimeOut
이유는
private Interceptor interceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (!NetworkUtil.isNetworkAvailable()) {
request = request.newBuilder()
.cacheControl(CacheControl.FORCE_CACHE)
.build();
}
Response response = chain.proceed(request); //Exception here
if (NetworkUtil.isNetworkAvailable()) {
String cacheControl = request.cacheControl().toString();
response = response.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.header("Cache-Control", cacheControl)
.build();
} else {
int maxStale = 60 * 60 * 24 * 7;
response = response.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
.build();
}
return response;
}
};
는 내가 설정 캐시에 사용 : Response response = chain.proceed(request);
나는 논평한다. SocketTimeOut
은 서브 클래스가 IOException
인데, 왜 내 코드가이를 포착 할 수 없습니까? 이 문제를 어떻게 해결할 수 있습니까?
안녕 @EKN, 내 업데이 트를 참조하십시오 백업합니다. Interceptor를 사용하여 캐시를 구성합니다. 어떻게하면 여기에 불량배를 잡을 수 있습니까? – phongvan