43 votes

HttpURLConnection setConnectTimeout() n'a aucun effet

Je me connecte à un simple flux RSS en utilisant HTTPUrlConnection. Cela fonctionne parfaitement. J'aimerais ajouter un délai d'attente à la connexion car je ne veux pas que mon application se bloque en cas de mauvaise connexion ou autre. C'est le code que j'utilise et la méthode setConnectTimeout n'a aucun effet.

         HttpURLConnection http = (HttpURLConnection) mURL.openConnection();
        http.setConnectTimeout(15000); //timeout after 15 seconds
...

Si cela peut aider, je développe sur Android.

63voto

pap Points 11466

Vous devriez également essayer de définir le délai de lecture ( http.setReadTimeout() ). Souvent, un serveur Web acceptera volontiers votre connexion, mais il peut être lent à répondre à la demande.

21voto

Caner Points 15625

Vous avez probablement l'un ou les deux : 1) Ne rien lire depuis la connexion 2) Ne pas intercepter et gérer l'exception correctement

Comme mentionné ici , utilisez une logique similaire à celle-ci :

 int TIMEOUT_VALUE = 1000;
try {
    URL testUrl = new URL("http://google.com");
    StringBuilder answer = new StringBuilder(100000);

    long start = System.nanoTime();

    URLConnection testConnection = testUrl.openConnection();
    testConnection.setConnectTimeout(TIMEOUT_VALUE);
    testConnection.setReadTimeout(TIMEOUT_VALUE);
    BufferedReader in = new BufferedReader(new InputStreamReader(testConnection.getInputStream()));
    String inputLine;

    while ((inputLine = in.readLine()) != null) {
        answer.append(inputLine);
        answer.append("\n");
    }
    in.close();

    long elapsed = System.nanoTime() - start;
    System.out.println("Elapsed (ms): " + elapsed / 1000000);
    System.out.println("Answer:");
    System.out.println(answer);
} catch (SocketTimeoutException e) {
    System.out.println("More than " + TIMEOUT_VALUE + " elapsed.");
}

4voto

Jack Sun Points 142
http.setConnectTimeout(15000);
http.setReadTimeout(15000);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X