Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 下载文件时会引发哪些异常?_Android_Exception_Download - Fatal编程技术网

Android 下载文件时会引发哪些异常?

Android 下载文件时会引发哪些异常?,android,exception,download,Android,Exception,Download,在我的应用程序中,我有一个下载参考数据更新的工具。用户可以在PreferenceActivity中修改基本url,然后我将实际文件名附加到基本url。当我尝试下载文件时,如果出现问题,可能会引发异常。我希望向用户提供最合适的错误消息,而不仅仅是发生错误。为此,我希望捕获单个异常并相应地格式化消息。那么,下载文件时会引发哪些异常?作为参考,以下是我的下载代码: int msgId; try { String url = props.getProperty(Constants.SETTING

在我的应用程序中,我有一个下载参考数据更新的工具。用户可以在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之类的内容不适用。

由于连接超时或连接被拒绝HTTP 403,存在连接异常

//编辑:我刚刚读到,大多数应用程序不应该捕获ConnectException;捕获超类更为健壮

此外,您还可以测试是否存在活动的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;
}

在我开始整个下载过程之前,我已经使用connectivity manager测试了是否存在连接,所以这已经包括在内了。我将添加SocketException,谢谢。