如何处理java.net.URL.openConnection()抛出的IOException?

时间:2013-03-21 18:55:20

标签: java android exception-handling httpurlconnection

我正在编写一个简单的方法来快速构建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 个答案:

答案 0 :(得分:3)

MalformedURLException:当网址格式不正确时(例如网址="?@ fake") ProtocolException:指示底层协议中存在错误(可能类似于SSL证书)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

通过检查抛出异常的原因消息参数,您应该能够找到原因

答案 3 :(得分:-1)

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