2013-02-11 111 views
1

在我的應用程序中,我有一個工具來下載參考數據更新。用戶可以在PreferenceActivity中修改基本網址 - 然後將實際文件名追加到基本網址。當我嘗試下載文件時,如果出現錯誤,可能會拋出異常。我想向用戶展示最合適的錯誤消息,而不是簡單地「發生錯誤」。要做到這一點,我想要捕捉個別的異常和相應的格式信息。那麼,下載文件時會拋出什麼異常呢?對於參考,這是我下載的代碼(簡化):下載文件時可能會拋出什麼異常?

int msgId; 
try { 
    String url = props.getProperty(Constants.SETTINGS_REFDATA_SOURCE); 
    if(!url.endsWith("/")) { 
     url += "/"; 
    } 

    url += Constants.UPDATE_CUSTOMER_FILE; 
    CSVReader in = new CSVReader(new InputStreamReader(url.openStream())); 

    ...//read and parse file here 
} 
catch(MalformedURLException e) { 
    msgId = R.string.error_invalid_base_url; 
} 
catch(UnknownHostException e) { 
    msgId = R.string.error_unknown_host; 
} 
catch(FileNotFoundException e) { 
    msgId = R.string.error_file_not_found; 
} 
catch(IOException e) { 
    msgId = R.string.error_reading_data; 
} 
catch(MyParseException e) { 
    msgId = R.string.error_invalid_file_format; 
} 
catch(Exception e) { 
    msgId = R.string.error_other_error; 
} 
finally { 
    try { in.close(); } catch(Exception e2) {} 
} 

// then I display AlertDialog using msgId as the message 

正如你所看到的,我已經趕上幾個例外 - 一些,我知道可以扔掉,一些我在測試中遇到的。我還需要迎合哪些其他例外情況?請注意,下載的數據量非常小(最多15-20 Kb),因此OutOfMemoryError等應不適用。

回答

0

還有就是ConnectException由於連接超時或拒絕連接(​​)

//編輯:我剛纔讀,說,「大多數應用程序不應該漁獲的ConnectException,它是更強大的抓超SocketException「。

此外,你可以檢測是否有可用的Internet連接:

private boolean checkCon() { 
    ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

    if (conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED 
     && conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) { 
     return false; 
    } 
    return true; 
} 
+0

我已經測試是否有使用連接管理器的連接,我纔開始整個下載過程,所以這是覆蓋。我將添加SocketException,謝謝。 – 2013-02-11 13:00:59

相關問題