2013-07-13 64 views
0

我有一個Service,它使用HttpURLConnection來管理下載任務。如何管理與HttpURLConnection丟失的連接?

在執行任何HTTP請求之前,我使用自定義isNetworkAvailable方法,但我想知道如何管理請求期間丟失的連接。

我應該在while循環中調用我的isNetworkAvailable方法嗎(這意味着很多調用)?管理與HttpURLConnection丟失連接的標準方式是什麼?

HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 

FileOutputStream outputStream = openFileOutput(filename, MODE_PRIVATE | MODE_APPEND);    

BufferedInputStream in = new BufferedInputStream(connection.getInputStream()); 

byte[] data = new byte[1024]; 
int x = 0; 

while ((x = in.read(data, 0, 1024)) >= 0) { 
    outputStream.write(data, 0, x); 
} 

回答

1

我建議抓住IOException,如果它發生,爲用戶提供一個選項,以重試或取消。您可能需要使用setConnectTimeou t(有關如何使用它的示例,請參閱HttpURLConnection timeout question),以確保在合理的時間內發生錯誤。作爲一個隨機的評論 - 如果你正在將數據讀入相當大的緩衝區,就像你在這裏一樣,使用BufferedInputStream幾乎沒有任何意義;直接使用connection.getInputStream()返回的輸入流即可。使用BufferedInputStream的唯一原因是如果您正在閱讀小塊,例如一次一個字節。

+0

好吧,我剛剛看到'IOException'有一個'ConnectException'子類。我會用這個,謝謝。關於'BufferedInputStream':我需要小塊來顯示下載進度。 – jul