如何处理java.net.URL.openConnection()引发的IOException?

如何处理java.net.URL.openConnection()引发的IOException?,java,android,exception-handling,httpurlconnection,Java,Android,Exception Handling,Httpurlconnection,我目前正在编写一个简单的方法来快速构建HttpURLConnection,在理解发生的异常时遇到了一些问题。目前看起来是这样的: public static HttpURLConnection buildConnection(String urlString) throws IOException{ try{ URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConne

我目前正在编写一个简单的方法来快速构建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。这个例外是什么?是什么原因导致了这种情况,当出现这种情况时,我的应用程序应该如何运行

非常感谢大家,,
William

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

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

表示发生了某种类型的I/O异常。 此类是由失败或中断的I/O操作产生的一般异常类。
希望这有助于发出某种I/O异常发生的信号。 此类是由失败或中断的I/O操作产生的一般异常类。
希望这对您有所帮助,您应该先看看Javadoc


通过检查抛出异常的原因和消息参数

您应该将Javadoc作为第一站查看,您应该能够在可用的情况下获得原因


如果可用,您应该能够通过检查引发异常的原因消息参数来获取原因MalformedURLException:当URL的格式不正确时(例如URL=“?@fake”) ProtocolException:指示基础协议中存在错误(可能类似于SSL证书无效)

IOException
您并没有得到错误的格式。异常仅表明您提供的字符串URL的结构是正确的。它不保证各自的主机存在并且可以访问。它也不能保证在连接到主机或对该主机执行任何读写操作时不会出现问题。因此,在打开与所需主机的连接时,如果出现问题(无法访问主机)或在连接握手过程中出现读/写错误,则可能会出现IOException。

MalformedURLException:当URL的格式不正确时(例如URL=“?@fake”) ProtocolException:指示基础协议中存在错误(可能类似于SSL证书无效)

IOException
您并没有得到错误的格式。异常仅表明您提供的字符串URL的结构是正确的。它不保证各自的主机存在并且可以访问。它也不能保证在连接到主机或对该主机执行任何读写操作时不会出现问题。因此,在打开到所需主机的连接时,如果出现问题(无法访问主机),或者在连接握手过程中出现读/写错误,您可能会收到IOException。

谢谢Gladwin。这是一个很好的具体答案。我将首先重试处理IOException,然后向用户显示一条通用网络错误消息。谢谢Gladwin。这是一个很好的具体答案。我将通过首先重试,然后向用户显示一条通用网络错误消息来处理IOException。