2013-03-21 113 views
0

我目前正在編寫一個簡單的方法來快速構建HttpURLConnection,並且在理解發生的異常時遇到了一些問題。目前,它看起來像這樣:如何處理由java.net.URL.openConnection()拋出的IOException?

public static HttpURLConnection buildConnection(String urlString) throws IOException{ 
    try{ 
     URL url = new URL(urlString); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setRequestMethod("GET"); 
     connection.setReadTimeout(10000 /* 10 seconds */); 
     connection.setConnectTimeout(10000 /* 10 seconds */); 
     return connection; 

    } catch (MalformedURLException e){ 
     // Impossible - All network URLs are taken from String resources 
     Log.w(LOG_LABEL, "URL \"" + urlString + "\" was malformed"); 
     e.printStackTrace(); 
     return null; 
    } catch (ProtocolException e){ 
     // Impossible - "GET" is a valid Request method 
     e.printStackTrace(); 
     return null; 
    } 
} 

我趕上並記錄MalformedURLException的和的ProtocolException異常,因爲我知道這是不可能的,他們會發生。但是,我拋出了可以通過url.openConnection()拋出的IOException。這是什麼例外?什麼原因導致它,以及我的應用程序如何發生一個行爲?

謝謝大家了, 威廉

回答

2

MalformedURLException的:當URL的格式不正確(如URL =「? @fake「) 的ProtocolException:表明,在底層協議出現錯誤(可能是類似SSL證書無效)

IOException異常 你沒有得到MalformedURLException的只是建議,字符串URL喲結構你提供的是正確的。它不保證相應的主機存在並且可以訪問。它也不保證在連接到主機或執行任何讀取或寫入主機時不會有任何問題。因此,如果出現問題(主機無法訪問)或在握手連接期間打開連接到所需主機時出現讀/寫錯誤,您可能會收到IOException。

+0

謝謝格拉德溫。這是一個很好的具體答案。我將通過首先重試來處理IOException,然後向用戶顯示一條通用的網絡錯誤消息。 – 2013-03-22 16:38:50

0

問題與網絡連接 - 不能夠寫入或從底層套接字接收。

-1

表示發生了某種I/O異常。 該類是由失敗或中斷的I/O操作產生的常規異常類。 希望這有助於

相關問題