2013-05-14 76 views
4

我有一个RestService接口与许多休息调用,我用我的应用程序。处理连接和读取超时的RestClient调用android

我设置超时处理connectionread-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); 
     } 
    } 

但我坚持处理超时的情况。 我想过使用这种方法,但是当休息呼叫失败时它不会进入这个循环。

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

任何人都可以帮助我这个..!?

回答

7

超时,坏网关,找不到主机和其他套接字 ErrorHandlers无法涵盖例外。 ErrorHandlers的目标是在ResponseErrorHandler的方法签名中声明的现有Response中查找错误。

所有的套接字异常都会抛出RestClientException,并且必须在try ... catch块中为每个RestTemplate操作(例如getForObject())捕获。

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

结账reference

希望,这有助于。

+0

感谢@alexei,感谢您的回复和建议。我已经添加了该标签。关于这个问题,我正在处理像你已经解释的REstClientException。我需要的是尝试获取Exception内部处理程序并在那里处理它。在SocketTimeoutExceptions的情况下,我想用消息左右在客户端中正常处理它。我在这个答案中评论相同:http://stackoverflow.com/a/14320675/1237656。请看一看..! – DroidBee 2013-05-23 11:47:33

+1

那么,我已经找到了这个问题的请求,但没有得到应有的回应。 http://forum.springsource.org/showthread.php?98449-Socket-read-timeout-exception-handling-with-http-gateway – 2013-05-23 12:58:29