2010-12-01 55 views
5

Je suis en utilisant les communes Apache HTTP DefaultHttpClient et après la construction, je suis la mise en son gestionnaire de nouvelle tentative:Apache HttpClient HttpRequestRetryHandler jamais invoqué


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

Le serveur que je vous envoie mes demandes fréquemment fois sur et dans le catch de mon appel execute(), je reçois une erreur d'E/S, "L'opération a expiré" mais je ne vois jamais l'instruction de journalisation "réessayer gestionnaire reçu exception de type" dans ma sortie de console. Toutes mes demandes sont des requêtes POST, mais elles sont idempotentes: elles peuvent être appelées plusieurs fois sans risque d'effets secondaires. Est-ce que je configure incorrectement le gestionnaire de réessai? Le gestionnaire de nouvelles tentatives est-il uniquement appelé dans certains scénarios?

Répondre

0

Essayez d'utiliser DefaultHttpRequestRetryHandler qui est une sous-classe de HttpRequestRetryHandler

1

Retour vrai si vous avez géré un cas exceptionnel dans votre gestionnaire.

Cela devrait empêcher l'exception d'être levée.

Vous pouvez également gérer l'exception Timeout dans votre gestionnaire.

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

Malheureusement, je n'ai plus accès au code source du projet, donc je ne peux pas l'essayer. – skyler