首先,这是我的代码:
public static boolean loginValide(final String username, final String password) throws IOException {
final boolean valide = false;
final String postData = "somePostParameters";
URL url;
HttpsURLConnection connexion;
url = new URL("someUrl");
connexion = (HttpsURLConnection) url.openConnection();
try {
connexion.setDoOutput(true);
final DataOutputStream dos = new DataOutputStream(connexion.getOutputStream());
dos.writeBytes(postData);
dos.flush();
dos.close();
final int responseCode = connexion.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_ACCEPTED) {
// ...
}
else {
// ...
}
} catch (final IOException e) {
throw new IOException(e); /* I am retrowing an exception so the
finally block is still called */
}
finally {
connexion.disconnect(); // Close the connection
}
return valide;
}
我的问题是我第一次只声明我的方法抛出 IOException 。但如果发生这种情况,我认为 HttpsUrlConnection 不会断开连接。 所以我想抓住 Exception ,重新抛出它,这样当我的方法被另一个类调用时,我可以处理网络/连接错误并告诉用户它,所以代码仍将运行finally块关闭连接。
首先,我是对的?或者还有另一种方法吗?
我不关心方法中的try{} catch{}
,我只是想确保连接和流将始终关闭,无论是否抛出异常。
另一个问题是我抛出异常的catch{}
块。 Eclipse告诉我:
Call requires API level 9 (current min is 8): new java.io.IOException
说真的,我不能使用低于9的API级别抛出异常?我希望这是一个笑话......
答案 0 :(得分:4)
要将IOEXception
与throwable一起使用,您需要min API 9
..检查
http://developer.android.com/reference/java/io/IOException.html#IOException(java.lang.Throwable)
答案 1 :(得分:2)
您可以在eclipse中更改MIN api级别
如果您进入清单文件并设置
<uses-sdk android:minSdkVersion="8" /> <!--in your case -->
然后,您将整个项目从最初运行2.2.X更改为2.3.X
在构建应用时,您可以随时更改最低API级别。
答案 2 :(得分:2)
即使try-block中的代码抛出异常,也会始终调用finally块中的代码。至于API级别限制 - 它是API级别9中添加的特定IOException(Throwable)
构造函数。