2017-12-13 9 views
2

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인데, 왜 내 코드가이를 포착 할 수 없습니까? 이 문제를 어떻게 해결할 수 있습니까?

답변

1

follwing을 같은 더 구성에 대한 사용 OkHttpClient :

final OkHttpClient okHttpClient = new OkHttpClient.Builder() 
    .connectTimeout(20, TimeUnit.SECONDS) 
    .writeTimeout(20, TimeUnit.SECONDS) 
    .readTimeout(30, TimeUnit.SECONDS) 
    .build(); 

을 다음이 okHttpClient 설정,

Retrofit.Builder() 
    .client(okHttpClient); 
2
쉽게 개조 통화 중에 발생하는 예외를 처리하기 위해 개조 콜백 방법을 사용할 수 있습니다

. onResponse() 및 onFailure() 메서드를 재정의합니다. 개조 호출이 성공하면 onResponse()가 트리거되고, 호출이 실패하거나 예외가 발생하면 onFailure()가 트리거됩니다.

당신은 개조 통화에 대한 더 나은 아이디어에 대한 자습서 아래를 참조 할 수는

https://www.journaldev.com/13639/retrofit-android-example-tutorial https://www.androidhive.info/2016/05/android-working-with-retrofit-http-library/

+0

안녕 @EKN, 내 업데이 트를 참조하십시오 백업합니다. Interceptor를 사용하여 캐시를 구성합니다. 어떻게하면 여기에 불량배를 잡을 수 있습니까? – phongvan