首先,这是我的代码:

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)构造函数。

08-17 11:53