2012-07-09 23 views
5

Estoy tratando de obtener el uso de la función setConnectTimeout así:HttpUrlConnection setConnectTimeout no funciona?

protected HttpURLConnection getConnection() throws SocketTimeoutException, IOException{ 
    Log.d("HTTPRequest", address); 
    URL page = new URL(address); 
    HttpURLConnection connection = (HttpURLConnection) page.openConnection(); 

    connection.setUseCaches(cacheResult); 
    connection.setConnectTimeout(3000); 
    connection.connect(); 
    return connection; 
} 

y luego:

public String getTextData() throws InternetConnectionUnavailableException { 
    try{ 
     HttpURLConnection conn = getConnection(); 
     StringBuffer text = new StringBuffer(); 
     InputStreamReader in = new InputStreamReader((InputStream) conn.getContent()); 
     BufferedReader buff = new BufferedReader(in); 
     String line; 

     while (true) { 
      if((line = buff.readLine()) != null){ 
       text.append(line); 
      }else{ 
       break; 
      } 
     } 
     return (text.toString()); 
    } catch (SocketTimeoutException socketTimeoutException) { 
      throw new InternetConnectionUnavailableException(); 
    } catch (IOException ioException) { 
      throw new InternetConnectionUnavailableException(); 
    } 
} 

Sin embargo, nunca se interpone en el "retén (SocketTimeoutException SocketTimeoutException)" bloque. ¿Qué pasa aquí?

P.S. Para las pruebas hice una página que pone a mi servidor en reposo durante 10 segundos.

Respuesta

8

probar esto:

try { 

    HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection(); 
    con.setRequestMethod("HEAD"); 

    con.setConnectTimeout(5000); //set timeout to 5 seconds 
    con.setReadTimeout(socketTimeout); 
    return (con.getResponseCode() == HttpURLConnection.HTTP_OK); 
} catch (java.net.SocketTimeoutException e) { 
    e.printStackTrace(); 
} catch (java.io.IOException e) { 
    e.printStackTrace(); 
} 
+0

Muy bien! Parece estar funcionando, pero no con.setRequestMethod ("HEAD"); ¿ensuciar algo? – user1462299

+0

Como supuse debido a esta línea anterior, no se pudieron cargar los enlaces normales. Simplemente eliminé este y agregué conn.connect(); Lanza ahora una excepción IOException después de que se agote el tiempo de espera - No lo hago si es IOException o cualquier otra cosa a menos que funcione – user1462299

+0

Parece que el tiempo de espera no funciona si la red se desconecta a mitad de la descarga. – NoBugs

Cuestiones relacionadas