java.net.UnknownHostException: Host "<url>" kann nicht aufgelöst werden: Keine Adresse mit Hostname und Ende der Eingabe bei Zeichen 0 von verknüpft

80

Ich habe eine App erstellt, die eine Frage aus meinen Webdiensten lädt und die einwandfrei funktioniert. Aber manchmal stürzt es ab und ich verstehe nicht, warum dies geschieht, insbesondere weil ich ihm auch die erforderlichen Berechtigungen erteilt habe. Es funktioniert gut, aber zufällig stürzt es ab und gibt mir diesen Bericht.

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)
Reshma
quelle
14
Sind Sie mit dem Internet verbunden?
Apoorv
Erhalten Sie die Antwort in Ihrem Protokoll gedruckt?
GrIsHu
Ja, ich habe nach einer Internetverbindung gesucht.
Reshma
1
Überprüfen Sie, ob das Telefon auf diese URL zugreifen kann (z.
Versuchen Sie es nicht mit dem Simulator, ich hatte das gleiche Problem. Und ich habe einen Tag damit verbracht, es herauszufinden. Schließlich bestand meine Lösung darin, ein echtes Android-Gerät zum Testen zu verwenden.
JPerk

Antworten:

218

Ich bin auch auf dieses Problem gestoßen. Durch erneutes Verbinden des WLAN kann dies behoben werden.

Für uns können wir prüfen, ob das Telefon den Host beim Starten der Anwendung in IP auflösen kann. Wenn es nicht behoben werden kann, weisen Sie den Benutzer an, das WLAN zu überprüfen und dann zu beenden.

Ich hoffe, es hilft.

RxRead
quelle
VIELEN DANK! Ich konnte nicht herausfinden, warum ich mich mit der Adresse verbinden konnte, aber nicht über meine App darauf zugreifen konnte.
Blöder
Ich musste mein Handy ausschalten!
Francisco Corrales Morales
Ich habe lange versucht herauszufinden, warum meine App nicht mehr funktioniert ... Von all den Dingen, die es hätte sein können, war es das. Vielen Dank!!
Thomaspsk
3
Gibt es dieses Problem noch in Android 7? Ich kann dieses Verhalten zufällig beim Öffnen der Anwendung feststellen. Die Netzwerkverbindung ist für die Anwendung verfügbar, verbindet jedoch den Zugriff auf die Webdienste. Was könnte dazu führen? Mehrere Geräte im Netzwerk haben das gleiche Problem.
X-HuMan
Kann es eine Möglichkeit geben, dem Benutzer eine Warnung oder einen Toast zu geben, da Programmierer das Problem möglicherweise verstehen, der Benutzer jedoch nicht zum Stackoverflow kommt, sondern nur die App deinstalliert.
DragonFire
19

Wenn das erneute Verbinden des WLAN für Sie nicht funktioniert, starten Sie Ihr Gerät neu.

Das funktioniert bei mir. Ich hoffe es hilft.

Jiyeh
quelle
16

Ich hatte die gleiche Ausnahme im Simulator (Android Studio unter OSX), aber die Verbindung zu derselben URL im iOS-Simulator funktionierte einwandfrei ... Es scheint, dass alles auf die Tatsache zurückzuführen ist, dass ich den Simulator ausführen würde, während ich mit einem persönlichen Hotspot verbunden bin für meine Internetverbindung und kam dann später zurück, während ich mit WLAN verbunden war und der Simulator die neue Internetverbindung aus irgendeinem Grund nicht mochte, scheint es, als ob der alte Hotspot die aktuelle Verbindung war, die nicht mehr funktionierte.

Das Schließen und Neustarten des Simulators hat funktioniert!

CMash
quelle
8

Ich habe den gleichen Fehler erhalten und das Problem war, dass ich auf VPN war und es nicht realisiert habe. Nach dem Trennen der Verbindung zum VPN und dem erneuten Herstellen der Verbindung zu meinem WIFI-Netzwerk wurde das Problem behoben.

adubey
quelle
5

Fehler beim Konfigurieren des Tags in der Manifestdatei

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Ajay Takur
quelle
4

Ich habe diesen Fehler festgestellt, als ich meine Android-App auf meinem Heim-WLAN ausgeführt habe und dann versucht habe, sie auf einem anderen WLAN auszuführen, ohne meinen Simulator zu schließen.

Das einfache Schließen des Simulators und das Neustarten der App hat bei mir funktioniert!

A. Sullivan
quelle
2

Ich hatte dieses Problem auf Android 10,

Geändert, targetSdkVersion 29um das targetSdkVersion 28Problem zu beheben. Ich bin mir nicht sicher, was das eigentliche Problem ist.

Ich denke keine gute Praxis, aber es hat funktioniert.

Vor:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 29

Jetzt:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 28

Vettiyanakan
quelle
1

Ich habe meine Anwendung mit dem Android-Emulator getestet und dieses Problem gelöst, indem ich das WLAN auf dem Android-Emulator-Gerät aus- und wieder eingeschaltet habe! Es hat perfekt funktioniert.

Hernán Daniel Piña Landinez
quelle
Ich habe das Gleiche getan, nur mit mobilen Daten.
Primož Ivančič
1

Ich hatte das gleiche Problem, aber mit Glide. Als ich mich vom WLAN trennen und die Verbindung wieder herstellen wollte (genau wie hier vorgeschlagen), bemerkte ich, dass ich mich im Flugzeugmodus befand 🤦‍♂🤦‍

Gabriel Guedes
quelle
0

Ich hatte das gleiche Problem. java.net.UnknownHostException: Host kann nicht aufgelöst werden "" ...

Ich verwende Visual Studio 2019 und Xamarin.

Ich wechselte auch wieder zu meinem WiFi, war aber an einem Hot Spot.

Ich habe das gelöst, indem ich den Emulator sauber gewischt habe. Auf Werkseinstellungen zurücksetzen. Führen Sie anschließend die Visual Studio Xamarin-App erneut aus, um Ihre App erneut auf dem neuen Emulator bereitzustellen.

Es funktionierte. Ich dachte, ich würde tagelang kämpfen, um das zu lösen. Zum Glück hat mich dieser Beitrag in die richtige Richtung gelenkt.

Ich konnte vorher nicht verstehen, wie es perfekt funktionierte und hörte dann ohne Codeänderung auf.

Dies ist mein Referenzcode:

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

Ich hatte das gleiche Problem, aber mit kleinen Unterschieden. Ich hatte NetworkConnectionCallback hinzugefügt, um die Situation zu überprüfen, in der sich die Internetverbindung zur Laufzeit geändert hatte, und dies vor dem Senden aller Anforderungen zu überprüfen:

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

Es kann Zustände wie VERBINDEN geben (Sie können sehen, wenn Sie WLAN einschalten, das Symbol beginnt zu blinken, nach dem Herstellen einer Verbindung zum Netzwerk ist das Bild statisch). Wir haben also zwei verschiedene Zustände: einen VERBINDEN einen anderen VERBINDEN, und wenn Retrofit versucht hat, eine Anfrage zu senden, ist die Internetverbindung deaktiviert und es wird eine UnknownHostException ausgelöst. Ich habe vergessen, eine andere Art von Ausnahme in die Funktion aufzunehmen, die für das Senden von Anforderungen verantwortlich war.

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

Es ist nur ein kniffliger Moment, der mit diesem Problem zusammenhängen kann.

Hoffe, ich werde jemandem helfen)

Boris Veriga
quelle