2017-12-28 7 views
0

私は、アンドロイドクライアントからODataプロトコルを実装したバックエンドと通信するために、olingoクライアントアンドロイド4.0.0ライブラリを使用しています。 私のolingoリクエストにリクエストタイムアウトを設定したいと思います。 また、接続エラー時に再試行を無効にしたいとします。olingoリクエストへの接続タイムアウトを設定する

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

タイムアウトを追加し、接続の再試行を無効にします。

+0

あなたのコードを共有してください。 –

答えて

1

Olingoクライアントライブラリのコードを調べた後、これを回避する方法がありました。

ODataClientは、パラメータを有するConfigurationプロパティを持ちます。 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); 

私はこれが誰かを助けることを望みます。

関連する問題