2

我目前正在编写一个简单的方法来快速构建一个 HttpURLConnection 并且我在理解发生的异常时遇到了一些问题。它目前看起来像这样:

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。这是什么异常?是什么原因造成的,我的应用程序在发生这种情况时应该如何表现?

非常感谢大家,威廉

4

4 回答 4

4

MalformedURLException:当 URL 的格式不正确时(例如 URL = "?@fake") ProtocolException:表示底层协议有错误(可能是 SSL 证书无效)

IOException 您没有得到 MalformedURLException 仅表明您提供的字符串 URL 的结构是正确的。它不保证相应的主机存在并且可以访问。它也不保证在连接到主机或对该主机执行任何读取或写入时不会出现问题。因此,如果出现问题(主机无法访问)或在连接握手期间出现读/写错误,则打开与所需主机的连接时,您可能会收到 IOException。

于 2013-03-21T19:19:01.497 回答
1

网络连接问题 - 无法写入底层套接字或从底层套接字接收。

于 2013-03-21T19:00:50.453 回答
0

您应该将 Javadoc 视为第一站。http://docs.oracle.com/javase/6/docs/api/java/io/IOException.html

您应该能够通过检查他抛出异常的原因消息参数来获得原因(如果有)

于 2013-03-21T19:05:32.047 回答
-1

表示发生了某种 I/O 异常。此类是由失败或中断的 I/O 操作产生的一般异常类。希望这可以帮助

于 2013-03-21T19:02:59.680 回答