2012-05-22 59 views
7

我正在使用HttpURLConnection類來發出http請求。 我的代碼看起來像這個 -HttpURLConnection.getInputStream()塊

while(true){ 
    try{ 
     connection=(HttpURLConnection)url.openConnection(); 
     connection.setDoOutput(true); 
     connection.setConnectTimeout(2*1000); 
     InputStream in=connection.getInputStream(); 
    } 
    catch(SocketTimeOutException e){} 
    catch(IOException e){} 
} 

我做了一些數據處理,一旦檢索到InputStream對象。我的問題是,如果我讓程序運行足夠長時間,則調用getInputStream將阻塞,並且我永遠不會過去。

我錯過了什麼嗎?任何指針或幫助將不勝感激。謝謝。

+4

不要在'while(true)'循環中做這種事'catch(SocketTimeOutException e){}'。這將很難調試或優雅地停止你的程序。 – artbristol

+2

@artbristol你​​想說什麼......這是從我們的生產代碼:) –

+2

除了做@artbristol說你有沒有試過註釋'connection.setDoOutput(true)',因爲這意味着它期望你打電話'connection.getOutputStream()'並在Http體內寫一些東西 –

回答

6

設置連接的讀取超時。 另外,一旦你完成了它們,關閉finally塊中的流。

+0

謝謝。這有助於很多工作。 – Sandman

+0

非常感謝! – jaisonDavis

1

您應關閉未使用的連接。例如:

connection = (HttpURLConnection) url.openConnection(); 
connection.setRequestMethod("GET"); 
connection.setDoOutput(true); 
connection.setReadTimeout(2*1000); 
connection.connect(); 
reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
stringBuilder = new StringBuilder(); 
String line = null; 
while ((line = reader.readLine()) != null) 
{ 
stringBuilder.append(line + "\n"); 
} 
String result = stringBuilder.toString(); 
reader.close(); 
+0

非常感謝您的回覆。在連接上設置讀取時間似乎可以解決它!非常感謝您的幫助。 – Sandman

+0

使用setDoOutput進行GET(true)不能很好地協同工作。 – zgulser