まず、ここに私のコードがあります:
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 レベルを使用して例外をスローすることはできませんか? 冗談だといいのですが…