将连接超时设置为olingo请求

时间:2017-12-28 04:37:25

标签: android odata olingo

我正在使用olingo客户端android 4.0.0库与我的后端进行通信,后端已经从Android客户端实现了OData协议。 我想为我的olingo请求设置请求超时。 另外,我想在连接失败时禁用重试。

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

我想添加超时并禁用连接重试。

1 个答案:

答案 0 :(得分:1)

在浏览Olingo客户端库的代码后,遇到了解决方法。

ODataClient具有Configuration属性,其中包含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);

我希望这会对某人有所帮助。