Обработка таймаутов подключения и чтения для вызовов RestClient в Android

У меня есть интерфейс RestService со многими остальными вызовами, которые я использую в своем приложении.

Я устанавливаю таймауты для обработки connection и read-timeouts

ClientHttpRequestFactory httpFactory = myRestService.getRestTemplate().getRequestFactory();
    if(httpFactory!=null)
    {
        if(httpFactory instanceof SimpleClientHttpRequestFactory)
        {
            ((SimpleClientHttpRequestFactory)httpFactory).setConnectTimeout(10*1000);
            ((SimpleClientHttpRequestFactory)httpFactory).setReadTimeout(30*1000);
        }
        else if(httpFactory instanceof HttpComponentsClientHttpRequestFactory)
        {
            ((HttpComponentsClientHttpRequestFactory)httpFactory).setConnectTimeout(10*1000);
            ((HttpComponentsClientHttpRequestFactory)httpFactory).setReadTimeout(30*1000);
        }
    }

Но я застрял с обработкой ситуации тайм-аута. Я думал об использовании этого метода, но он не входит в этот цикл, когда происходит сбой вызова rest.

myRestService.getRestTemplate().setErrorHandler(new ResponseErrorHandler() 
    {
        @Override
        public boolean hasError(ClientHttpResponse paramClientHttpResponse) throws IOException 
        {
            Log.e(TAG, paramClientHttpResponse==null?"Null response" : ("Has Error : " + paramClientHttpResponse.getStatusText()+" , status code : "+paramClientHttpResponse.getStatusCode()));

            return false;
        }
        @Override
        public void handleError(ClientHttpResponse paramClientHttpResponse) throws IOException 
        {
            Log.e(TAG, paramClientHttpResponse==null?"Null response":("Handle Error : " + paramClientHttpResponse.getStatusText()+" , status code : "+paramClientHttpResponse.getStatusCode()));
        }
    });

Может ли кто-нибудь помочь мне с этим..!?


person Aswathy P Krishnan    schedule 14.05.2013    source источник


Ответы (1)


Тайм-аут, неверный шлюз, хост не найден и другие исключения сокета не могут быть обработаны обработчиками ошибок. Целью ErrorHandlers является поиск ошибок в существующем ответе, как указано в сигнатуре метода ResponseErrorHandler.

Все исключения сокетов вызывают RestClientException и должны быть перехвачены для каждой операции RestTemplate, такой как getForObject() в блоке try...catch.

try {
    repr = myRestService.getRestTemplate().getForObject(url, responseType, vars);
} catch (RestClientException e) {
    //Further exception processing, forming negative response should be here
}

Ознакомьтесь с справочником.

Надеюсь, это поможет.

person alexei burmistrov    schedule 22.05.2013