2012-07-09 13 views
5

Próbuję uzyskać użycia funkcji setConnectTimeout tak:HttpUrlConnection setConnectTimeout nie działa?

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

, a następnie:

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

Jednak nigdy nie robi się w "catch (SocketTimeoutException SocketTimeoutException)" blok. Co tu jest nie tak.

P.S. Do testowania stworzyłem stronę, która kładzie mój serwer w sen przez 10 sekund.

Odpowiedz

8

spróbuj tego:

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

porządku! Wydaje się działać, ale nie będzie con.setRequestMethod ("HEAD"); zepsuć coś? – user1462299

+0

Tak jak przypuszczałem z powodu tej linii powyżej normalne linki nie mogły zostać załadowane. Po prostu usunąłem ten i dodałem conn.connect(); Rzuca teraz wyjątek IOException po upływie limitu czasu - nie, jeśli jest to wyjątek IOException lub cokolwiek innego, chyba że działa – user1462299

+0

Wygląda na to, że przekroczenie limitu czasu nie zadziała, jeśli sieć zostanie rozłączona w trakcie pobierania. – NoBugs

Powiązane problemy