首先,这是我的代码:
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将不会断开连接。
因此,我认为捕获异常,然后将其重新抛出,以便当我的方法被另一个类调用时,我可以处理网络/连接错误并告知用户有关的信息,因此代码仍将运行finally块来关闭连接。
首先,对吗?还是有其他方法可以做到这一点?
我不在乎方法中的
try{} catch{}
,我只是想确保无论是否引发异常,连接和流都将始终关闭。另一个问题是我抛出异常的
catch{}
块。 Eclipse告诉我:Call requires API level 9 (current min is 8): new java.io.IOException
说真的,我不能使用低于9的API级别引发异常吗?我希望这是个玩笑...
最佳答案
即使try块中的代码引发异常,也会始终调用finally块中的代码。关于API级别限制-这是在API级别9中添加的特定IOException(Throwable)
构造函数。