下载文件时可以抛出哪些异常?

时间:2013-02-11 10:05:09

标签: android exception download

在我的应用程序中,我有一个下载参考数据更新的工具。用户可以在PreferenceActivity中修改基本URL,然后将实际文件名附加到基本URL。当我尝试下载文件时,如果出现问题,可能会抛出异常。我想向用户提供最合适的错误消息,而不仅仅是“发生错误”。为此,我想捕获单独的异常并相应地格式化消息。那么,下载文件时可以抛出哪些异常?作为参考,这是我的下载代码(简化):

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之类的内容不适用。

1 个答案:

答案 0 :(得分:0)

由于连接超时或连接被拒绝(ConnectException

,存在HTTP 403

//编辑:我刚才读到,“大多数应用程序不应该捕获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;
}