0

まず、ここに私のコードがあります:

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{}ん。例外がスローされるかどうかに関係なく、接続とストリームが常に閉じられるようにしたいだけです。

もう 1 つの問題はcatch{}、例外をスローするブロックです。エクリプスは私に言う:

Call requires API level 9 (current min is 8): new java.io.IOException

まじめな話、9 未満の API レベルを使用して例外をスローすることはできませんか? 冗談だといいのですが…

4

3 に答える 3

4

スローアブルで使用するには、 ..チェックIOEXceptionが必要です。min API 9

http://developer.android.com/reference/java/io/IOException.html#IOException(java.lang.Throwable

于 2013-01-17T11:01:20.410 に答える
2

EclipseでMIN APIレベルを変更できます

マニフェストファイルに移動して設定した場合

    <uses-sdk android:minSdkVersion="8" /> <!--in your case -->

次に、プロジェクト全体を最低でも 2.2.X から 2.3.X に変更します。

アプリを構築している間は、いつでも最小 API レベルを変更できます。

于 2013-01-17T10:59:00.713 に答える
2

try ブロック内のコードが例外をスローした場合でも、finally ブロック内のコードは常に呼び出されます。API レベルの制限についてはIOException(Throwable)、API レベル 9 で追加された特定のコンストラクターです。

于 2013-01-17T11:00:24.577 に答える