java.net.UnknownHostException:ホスト「<url>」を解決できません:ホスト名に関連付けられたアドレスがなく、文字0の入力の終わり


84

Webサービスから質問を読み込むアプリを作成しましたが、正常に動作します。ただし、クラッシュすることがあり、これが発生する理由がわかりません。特に、必要な権限も付与しているためです。正常に動作しますが、ランダムにクラッシュしてこのレポートが表示されます。

private void sendContinentQuestions(int id) {
    // TODO Auto-generated method stub

    //Get the data (see above)
    JSONArray json = getJSONfromURL(id);
        try{
            for(int i=0; i < json.length(); i++) {
                HashMap<String, String> map = new HashMap<String, String>();
                JSONObject jObject = json.getJSONObject(i);
                longitude":"72.5660200"
                String category_id = jObject.getString("category_id");
                String question_id = jObject.getString("question_id");
                String question_name = jObject.getString("question_name");
                String latitude = jObject.getString("latitude");
                String longitude = jObject.getString("longitude");
                String answer = jObject.getString("answer");
                String ansLatLng = latitude+"|"+longitude ; 
                Log.v("## data:: ###",question_id+"--"+question_name+"-cat id-"+category_id+"--ansLatLng "+ansLatLng+" answer: "+answer);

                all_question.add(new QuestionData(game_id,category_id,question_id,question_name,ansLatLng,answer));
            }
        }catch(JSONException e)        {
            Log.e("log_tag", "Error parsing data "+e.toString());
        }
    }


}
 public JSONArray getJSONfromURL(int id){

    String response = "";
    URL url;
    try {
        url = new URL(Consts.GET_URL+"index.php/Api/getQuestion?cat_id="+id);
        HttpURLConnection http = (HttpURLConnection) url.openConnection();
        http.setRequestMethod("POST");
        InputStream is = http.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        response = br.readLine();
        Log.v("###Response :: ###",response);
        http.disconnect();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }catch (ProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace(); 
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    //try parse the string to a JSON object
    JSONArray jArray = null;
    try{

        jArray = new JSONArray(response);

    }catch(JSONException e){
        Log.e("log_tag", "Error parsing data "+e.toString());
    }

    return jArray;
}

11-13 15:02:52.307: W/System.err(8012): java.net.UnknownHostException: Unable to resolve host "www.xyz.com": No address associated with hostname
11-13 15:02:52.317: W/System.err(8012):     at java.net.InetAddress.lookupHostByName(InetAddress.java:424)
11-13 15:02:52.317: W/System.err(8012):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
11-13 15:02:52.317: W/System.err(8012):     at java.net.InetAddress.getAllByName(InetAddress.java:214)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)
11-13 15:02:52.327: W/System.err(8012):     at com.abc.xyz.ContinentActivity.getJSONfromURL(ContinentActivity.java:400)
11-13 15:02:52.327: W/System.err(8012):     at com.abc.xyz.ContinentActivity.sendContinentQuestions(ContinentActivity.java:327)
11-13 15:02:52.327: W/System.err(8012):     at com.abc.xyz.ContinentActivity.access$2(ContinentActivity.java:323)
11-13 15:02:52.327: W/System.err(8012):     at com.abc.xyz.ContinentActivity$LoadQuestions.doInBackground(ContinentActivity.java:254)
11-13 15:02:52.327: W/System.err(8012):     at com.abc.xyz.ContinentActivity$LoadQuestions.doInBackground(ContinentActivity.java:1)
11-13 15:02:52.327: W/System.err(8012):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-13 15:02:52.327: W/System.err(8012):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
11-13 15:02:52.327: W/System.err(8012):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-13 15:02:52.327: W/System.err(8012):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
11-13 15:02:52.337: W/System.err(8012):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
11-13 15:02:52.337: W/System.err(8012):     at java.lang.Thread.run(Thread.java:841)
11-13 15:02:52.337: W/System.err(8012): Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
11-13 15:02:52.337: W/System.err(8012):     at libcore.io.Posix.getaddrinfo(Native Method)
11-13 15:02:52.337: W/System.err(8012):     at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61)
11-13 15:02:52.337: W/System.err(8012):     at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
11-13 15:02:52.337: W/System.err(8012):     ... 24 more
11-13 15:02:52.337: E/log_tag(8012): Error parsing data org.json.JSONException: End of input at character 0 of 
11-13 15:02:52.337: W/dalvikvm(8012): threadid=194: thread exiting with uncaught exception (group=0x417c1700)
11-13 15:02:52.337: E/AndroidRuntime(8012): FATAL EXCEPTION: AsyncTask #5
11-13 15:02:52.337: E/AndroidRuntime(8012): java.lang.RuntimeException: An error occured while executing doInBackground()
11-13 15:02:52.337: E/AndroidRuntime(8012):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at java.lang.Thread.run(Thread.java:841)
11-13 15:02:52.337: E/AndroidRuntime(8012): Caused by: java.lang.NullPointerException
11-13 15:02:52.337: E/AndroidRuntime(8012):     at com.abc.xyz.ContinentActivity.sendContinentQuestions(ContinentActivity.java:328)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at com.abc.xyz.ContinentActivity.access$2(ContinentActivity.java:323)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at com.abc.xyz.ContinentActivity$LoadQuestions.doInBackground(ContinentActivity.java:254)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at com.abc.xyz.ContinentActivity$LoadQuestions.doInBackground(ContinentActivity.java:1)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)

15
インターネットに接続していますか?
Apoorv 2013年

応答がログに出力されますか?
GrIsHu 2013年

はい、インターネット接続を確認しました。
reshma 2013年

1
電話がこのURLにアクセスできるかどうかを確認します(例としてブラウザで)

シミュレーターで試さないでください、私は同じ問題を抱えています。そして、私はそれを理解しようとして1日を費やしました。最後に、私の解決策は、テストに実際のAndroidデバイスを使用することでした。
JPerk 2018

回答:


224

私もこの問題に遭遇しました。WiFiを再接続することでこれを解決できます。

私たちの場合、アプリケーションを起動するときに、電話がホストをIPに解決できるかどうかを確認できます。解決できない場合は、WiFiを確認して終了するようにユーザーに指示します。

お役に立てば幸いです。


どうもありがとうございました!なぜアドレスに接続できたのにアプリからアクセスできなかったのか理解できませんでした。愚かなのWiFiバグ...
DemonGyro

電話を切らなければなりませんでした!
フランシスココラレスモラレス2014年

私のアプリが機能しなくなった理由を理解しようと長い間過ごしました...それがあった可能性のあるすべてのことの中で、これはそれでした。ありがとうございました!!
thomaspsk 2016年

4
この問題はAndroid7にもまだ存在しますか?アプリケーションを開くと、この動作がランダムに発生する可能性があります。アプリケーションではネットワーク接続を利用できますが、Webサービスへのアクセスに接続します。これには何が原因でしょうか?ネットワーク内の複数のデバイスで同じ問題が発生します。
X-HuMan 2017

プログラマーは問題を理解しているかもしれないが、ユーザーはスタックオーバーフローに来ないので、ユーザーに警告や乾杯をする方法はありますか
–DragonFire20年

20

WiFiの再接続がうまくいかない場合は、デバイスを再起動してみてください。

これは私にとってはうまくいきます。それが役に立てば幸い。


16

シミュレーター(OSX上のAndroid Studio)でも同じ例外がありましたが、iOSシミュレーターで同じURLに接続しても問題なく動作しました...個人のホットスポットに接続しているときにシミュレーターを実行していたことが原因のようです私のインターネット接続のために、その後、wifiに接続しているときに戻ってきましたが、シミュレーターは何らかの理由で新しいインターネット接続を気に入らなかったようです。古いホットスポットが現在の接続であり、機能しなくなったようです。

シミュレーターを閉じて再起動することができました!


9

同じエラーが発生しました。問題は、VPNを使用していて、気づかなかったことです。VPNから切断し、WIFIネットワークに再接続した後、問題は解決しました。


5

マニフェストファイルでタグを構成できませんでした

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

4

自宅のWiFiでAndroidアプリを実行し、シミュレーターを閉じずに別のWiFiで実行しようとすると、このエラーが発生しました。

シミュレーターを閉じてアプリを再起動するだけでうまくいきました!


2

私はAndroid10でこの問題を抱えていました

問題が解決targetSdkVersion 29するように変更さtargetSdkVersion 28れました。実際の問題は何かわからない。

良い習慣ではないと思いますが、うまくいきました。

前:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 29

今:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 28



1

私は同じ問題を抱えていましたが、グライドでした。Wi-Fiから切断して再接続しようとしたとき(ここで提案されたように)、機内モードになっていることに気付きました🤦‍♂️


0

私も同じ問題を抱えていました。java.net.UnknownHostException:ホスト「」を解決できません。。。

Visual Studio2019とXamarinを実行しています。

私もWiFiに切り替えましたが、ホットスポットにありました。

エミュレータをきれいにスワイプすることでこれを解決しました。工場出荷時の設定に戻します。次に、Visual Studio Xamarinアプリを再実行します。これにより、アプリが新しいエミュレーターに再デプロイされます。

機能した。私はこれを解決するために何日も戦うつもりだと思った。幸いなことに、この投稿は私を正しい方向に向けました。

以前は完全に機能することが理解できず、コードを変更せずに停止しました。

これは参照用の私のコードです:

using var response = await httpClient.GetAsync(sb.ToString());
string apiResponse = await response.Content.ReadAsStringAsync();

0

私は同じ問題を抱えていましたが、わずかな違いがありました。NetworkConnectionCallbackを追加して、実行時にインターネット接続が変更されたときの状況を確認し、すべての要求を送信する前に次のように確認しました。

private fun isConnected(): Boolean {
    val activeNetwork = cManager.activeNetworkInfo
    return activeNetwork != null && activeNetwork.isConnected
}

CONNECTINGのような状態が存在する可能性があります(wifiをオンにすると、アイコンが点滅し始め、ネットワークに接続した後、画像が静止していることがわかります)。したがって、2つの異なる状態があります。1つはCONNECT、もう1つはCONNECTINGであり、Retrofitが要求を送信しようとすると、インターネット接続が無効になり、UnknownHostExceptionがスローされます。リクエストの送信を担当する別のタイプの例外を関数に追加するのを忘れました。

try{
//for example, retrofit call
}
catch (e: Exception) {
        is UnknownHostException -> "Unknown host!"
        is ConnectException -> "No internet!"
        else -> "Unknown exception!"
    }

これは、この問題に関連する可能性のあるトリッキーな瞬間です。

願わくば、誰かを助けます)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.