2017-12-28 4 views
0

Ich benutze Olingo Client Android 4.0.0 Bibliothek mit meinem Backend zu kommunizieren, die OData-Protokoll von Android-Client implementiert hat. Ich möchte Anfrage Timeout auf meine Olingo Anfrage setzen. Auch ich möchte die Wiederholung bei Verbindungsfehler deaktivieren.Set Verbindung Timeout zu Olingo Anfrage

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

Ich möchte Timeout hinzufügen und Verbindungswiederholung für es deaktivieren.

+0

teilen Sie Ihren Code. –

Antwort

1

Nach dem Durchlaufen des Codes von Olingo Client-Bibliothek kam eine Abhilfe für diese.

ODataClient hat eine Configuration Eigenschaft, die HttpClientFactory Parameter hat. Ich musste eine Klasse erstellen, die DefaultHttpClientFactory erweitert und überschreiben seine Methoden, um HttpClient mit Timeout zu aktualisieren und Richtlinienänderungen erneut zu versuchen.

Kompletter Code ist wie folgt.

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; 
     } 
    } 

Ich habe dies meinem oDataClient wie unten hinzugefügt.

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

Ich hoffe, das jemand helfen.