1. 序章
このチュートリアルでは、例を使用してUnknownHostExceptionの原因を学習します。 また、例外を防止および処理するための可能な方法についても説明します。
2. 例外はいつスローされますか?
UnknownHostException は、ホスト名のIPアドレスを判別できなかったことを示します。 ホスト名のタイプミスが原因で発生する可能性があります。
String hostname = "http://locaihost";
URL url = new URL(hostname);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.getResponseCode();
上記のコードは、スペルミスのある locaihost がIPアドレスを指していないため、UnknownHostExceptionをスローします。
UnknownHostException のもう1つの考えられる理由は、DNS伝播の遅延またはDNSの設定ミスです。
新しいDNSエントリがインターネット全体に伝播されるまでに最大48時間かかる場合があります。
3. それを防ぐ方法は?
そもそも例外の発生を防ぐことは、後でそれを処理するよりも優れています。 例外を防ぐためのいくつかのヒントは次のとおりです。
- ホスト名を再確認してください:タイプミスがないことを確認し、すべての空白を削除してください。
- システムのDNS設定を確認します。DNSサーバーが起動して到達可能であることを確認し、ホスト名が新しい場合は、DNSサーバーが追いつくのを待ちます。
4. それをどのように扱うか?
UnknownHostException は、[X31X]チェック済み例外であるIOExceptionを拡張します。 他のチェックされた例外と同様に、それをスローするか、try-catchブロックで囲む必要があります。
この例で例外を処理しましょう。
try {
con.getResponseCode();
} catch (UnknownHostException e) {
con.disconnect();
}
UnknownHostExceptionが発生したときに接続を閉じることをお勧めします。無駄な開いている接続が多いと、アプリケーションのメモリが不足する可能性があります。
5. 結論
この記事では、 UnknownHostException の原因、それを防ぐ方法、およびそれを処理する方法を学びました。
いつものように、コードはGithubでから入手できます。