2017-12-28 23 views
0

olingo 클라이언트 android 4.0.0 라이브러리를 사용하여 Android 클라이언트에서 OData 프로토콜을 구현 한 백엔드와 통신합니다. olingo 요청에 대한 요청 시간 제한을 설정하고 싶습니다. 또한 연결 실패시 다시 시도를 비활성화하려고합니다.olingo 요청에 연결 시간 초과 설정

ODataClient oDataClient = ODataClientFactory.getV4(); 
ODataEntityCreateRequest<ODataEntity> req = oDataClient.getCUDRequestFactory() 
          .getEntityCreateRequest(uri, oDataEntity); 

타임 아웃을 추가하고 연결 재 시도를 비활성화하려고합니다.

+0

코드를 공유하십시오. –

답변

1

Olingo 클라이언트 라이브러리의 코드를 살펴본 후이 문제를 해결했습니다.

ODataClientConfiguration 속성을 가지며, HttpClientFactory 매개 변수를 갖습니다. DefaultHttpClientFactory을 확장 한 클래스를 만들어야하고 HttpClient을 업데이트하고 정책 변경을 다시 시도하는 메서드를 재정의해야했습니다.

전체 코드는 다음과 같습니다.

private class RequestRetryHttpClientFactory extends DefaultHttpClientFactory { 
     private final int HTTP_REQUEST_TIMEOUT = 2 * 60 * 1000; 

     @Override 
     public org.apache.http.impl.client.DefaultHttpClient create(HttpMethod method, URI uri) { 
      final HttpRequestRetryHandler myRetryHandler = new HttpRequestRetryHandler() { 
       @Override 
       public boolean retryRequest(IOException e, int i, HttpContext httpContext) { 
        Log.d(getClass().getSimpleName(), "RETRY REQUEST"); 
        return false; 
       } 
      }; 
      final DefaultHttpClient httpClient = super.create(method, uri); 
      HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), HTTP_REQUEST_TIMEOUT); 
      HttpConnectionParams.setSoTimeout(httpClient.getParams(), HTTP_REQUEST_TIMEOUT); 

      httpClient.setHttpRequestRetryHandler(myRetryHandler); 
      return httpClient; 
     } 
    } 

나는 이것을 oDataClient에 다음과 같이 추가했습니다.

ODataClient oDataClient = ODataClientFactory.getV4(); 
oDataClient.getConfiguration().setHttpClientFactory(new RequestRetryHttpClientFactory()); 
ODataEntityCreateRequest<ODataEntity> req = oDataClient.getCUDRequestFactory() 
          .getEntityCreateRequest(uri, oDataEntity); 

이 정보가 도움이되기를 바랍니다.