2013-03-21 53 views
0

我目前正在编写一个简单的方法来快速构建HttpURLConnection,并且在理解发生的异常时遇到了一些问题。目前,它看起来像这样:如何处理由java.net.URL.openConnection()抛出的IOException?

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。这是什么例外?什么原因导致它,以及我的应用程序如何发生一个行为?

谢谢大家了, 威廉

回答

2

MalformedURLException的:当URL的格式不正确(如URL =“? @fake“) 的ProtocolException:表明,在底层协议出现错误(可能是类似SSL证书无效)

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

+0

谢谢格拉德温。这是一个很好的具体答案。我将通过首先重试来处理IOException,然后向用户显示一条通用的网络错误消息。 – 2013-03-22 16:38:50

0

问题与网络连接 - 不能够写入或从底层套接字接收。

-1

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

相关问题