2010-12-01 26 views
5

estoy usando los bienes comunes de Apache HTTP DefaultHttpClient y después de la construcción, que estoy estableciendo su manejador de reintento:Apache HttpClient HttpRequestRetryHandler nunca invocó


httpClient.setHttpRequestRetryHandler(new HttpRequestRetryHandler() { 
       @Override 
       public boolean retryRequest(final IOException ioe, 
         final int numRetry, final HttpContext context) 
       { 
        Log.d(TAG, "retry handler received exception of type: " + ioe.getClass().getName() + ", num retries: " + numRetry); 
        if (numRetry > 4) { // 3 retries 
         return false; 
        } 
        // Some exceptions we can retry without knowledge of which methods are being invoked 
        if (ioe instanceof NoHttpResponseException 
          || ioe instanceof UnknownHostException 
          || ioe instanceof SocketException) { 
        } 
        return false; 
       } 
     }); 

El servidor que estoy enviando mis peticiones a menudo el tiempo de espera, y en el catch de mi llamada execute(), recibo un error IO, "La operación agotó el tiempo de espera", sin embargo, nunca veo la instrucción de registro "retry handler received exception of type" en la salida de mi consola. Todas mis solicitudes son solicitudes POST, pero son idempotentes; es seguro llamar varias veces sin efectos secundarios adversos.

¿Estoy configurando incorrectamente el controlador de reintento? ¿El controlador de reintentos solo se invoca en ciertos escenarios?

Respuesta

0

Intente utilizar DefaultHttpRequestRetryHandler que es una subclase de HttpRequestRetryHandler

1

Volver cierto si usted manejó un caso excepcional en el controlador.

Eso debería evitar que se produzca la excepción.

También podría manejar la excepción Timeout en su controlador también.

httpClient.setHttpRequestRetryHandler(new HttpRequestRetryHandler() { 
       @Override 
       public boolean retryRequest(final IOException ioe, 
         final int numRetry, final HttpContext context) 
       { 
        Log.d(TAG, "retry handler received exception of type: " + ioe.getClass().getName() + ", num retries: " + numRetry); 
        if (numRetry > 4) { // 3 retries 
         return false; 
        } 
        // Some exceptions we can retry without knowledge of which methods are being invoked 
        if (ioe instanceof NoHttpResponseException 
          || ioe instanceof UnknownHostException 
          || ioe instanceof SocketException 
          // Replace with the actual type of the exception 
          || ioe instanceof TimeoutException) { 
            return true; 
        } 
        return false; 
       } 
     }); 
+0

Lamentablemente, ya no tengo acceso al código fuente del proyecto, así que no puedo probarlo. – skyler

Cuestiones relacionadas