Android: UnknownHostException


68

Ich verwende Android SDK 2.2 und teste meine Anwendung mit dem Emulator. Ich möchte einen HTTP-Beitrag senden. Wenn ich das tue, bekomme ich eine UnknownHostException. Ich habe die erforderlichen Berechtigungen
<uses-permission android:name="android.permission.INTERNET" /> platziert
in die Datei manifest.xml eingefügt. Außerdem kann ich den Browser im Emulator öffnen und problemlos zur URL navigieren.

Hier ist mein Code:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost( uri );
HttpResponse response = null;
try
{
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
2 );
nameValuePairs.add( new BasicNameValuePair( "id", "edit-name" ) );
nameValuePairs
.add( new BasicNameValuePair( "stringdata", userName ) );
httppost.setEntity( new UrlEncodedFormEntity( nameValuePairs ) );

// Execute HTTP Post Request
response = httpclient.execute( httppost );
// Log.i( "HttpManager:", "======> response: "
// + response.getEntity().getContent() );

}
catch (ClientProtocolException e)
{
Log.e( "HttpManager", "ClientProtocolException thrown" + e );
}
catch (IOException e)
{
Log.e( "HttpManager", "IOException thrown" + e );
}

} catch(Exception e) { System.out.println("Error:"+e); } catch (ClientProtocolException e) { Log.e( "HttpManager", "ClientProtocolException thrown" + e ); } catch (IOException e) { Log.e( "HttpManager", "IOException thrown" + e ); } Dies zeigt den Fehler als bereits behandelte Ausnahme an.
Hackbal Teamz

Antworten:


116

Ok, ich fühle mich ziemlich lahm ... Das INTERNET-Berechtigungs-Tag ist ein Kind des Manifest-Tags, nicht des Anwendungs-Tags. Meine Güte!


1
Für andere Neulinge wie mich fügen Sie Folgendes direkt nach <manigest> in Ihr Manifest ein: <using-allow android: name = "android.permission.INTERNET" />
Alex Rashkov

51

Aus Rücksicht auf andere bin ich auf dieses Problem gestoßen, und ein Google hat mich gelandet. Wie von anisbet erwähnt, habe ich mein Erlaubnis-Tag noch einmal überprüft und es war an der richtigen Stelle.

Ich habe schließlich den in Android integrierten Browser gestartet und erhielt die gleiche Antwort von meinem Webserver sowie von Google.com (während der Computer selbst in Ordnung war). Ich habe den Android-Emulator beendet und neu gestartet. arbeitete am ersten Versuch.

Nach dem Überprüfen Ihres Codes kann es sich lohnen, den Emulator neu zu starten. Um dem Emulator gerecht zu werden, stürzten kurz darauf einige Programme ab, sodass möglicherweise etwas anderes in meinem Computer vor sich ging. Trotzdem verschwendete dies eine Menge Zeit für mich. Vielleicht erspart dies jemandem die Kopfschmerzen, die ich hatte.

Viel Glück!


Gleiches gilt für das Debuggen auf einem tatsächlichen Gerät - starten Sie es einfach neu :)
MSpeed

Der Android-Emulator scheint einige Netzwerkänderungen nicht zu mögen, selbst der Intel HAXM-beschleunigte Gingerbread. Wenn ich von einem WiFi-Netzwerk zu einem mit MiFi betriebenen Netzwerk wechsle, wird dieser Fehler angezeigt und ich starte den Emulator neu.
Louielouie

34

Stellen Sie sicher, dass Sie eine Internetverbindung haben. Das ist mir passiert, als ich vergessen habe, dass ich mit einem Mobiltelefon ohne Internetverbindung teste.


1
Oh wow, ich kann nicht glauben, dass dies mein Problem war! Stellen Sie sicher, dass WLAN aktiviert ist, wenn Sie zusätzliche Testgeräte verwenden. danke
Glenn.nz

Ja, ich habe angenommen, dass das Internet über das Debugging-Kabel über USB läuft, aber natürlich direkt vom Telefon!
Lukos

17

Sie wissen, was es für mich gelöst hat, war, die Erlaubnis kurz vor das schließende Manifest-Tag zu setzen, wie folgt:

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

9

Es passiert manchmal, wenn Sie eine App im Emulator ausführen. Starten Sie einfach den Emulator neu, um das Problem zu lösen. Es hat bei mir funktioniert!


5

Wenn keines der oben genannten Verfahren funktioniert hat, treten Sie einen Schritt zurück und stellen Sie sicher, dass Ihr Gerät oder Emulator tatsächlich das Internet erreichen kann, indem Sie einen Browser öffnen.


2

Beim Testen einer App mit einer minSdkVersion von 4 stieß ich auf ein ähnliches Problem, und ich habe versucht, sie auf einem G1 auszuführen. Das Ändern auf 3 löste das Problem für mich.


ziemlich seltsam, aber ich hatte genau das gleiche Problem und das Ändern von de minSdkVersion hat das Problem auch für mich behoben
Mark Mooibroek

Das hat auch bei mir funktioniert. Ich hatte minSdkVersion = "7". Ich habe es auf "6" gesetzt und es hat funktioniert.
Gagege

2

Ich bin auf dasselbe Problem gestoßen. Ich habe die richtigen Berechtigungen in meiner Android Manifest-Datei und die URL ist auch korrekt. Ich erhalte die Antwort im Webbrowser. Ich habe die IDE Emulator neu gestartet, aber das Problem nicht behoben. Also habe ich die AVD mit dem AVD Manager gelöscht und dann den Emulator gestartet und es fing an zu funktionieren.


2

Eine letzte Überprüfung wäre, dass Ihr Domain-Name eine gültige Domain ist. Ein Unterstrich in einer Domain ist ungültig und löst eine unbekannte Host-Ausnahme aus.


Dies ist ein seltenes Problem, aber wirklich ärgerlich! Siehe Erklärung hier
Kapé

1

Eine andere Sache: Es stellte sich heraus, dass das Internet selbst für mich nicht funktionierte. Das Starten des Emulators über die Befehlszeile mit diesen Schaltern hat es für mich behoben:emulator -avd your_avd_name -dns-server 8.8.8.8



0

Überprüfen Sie dies auch, wenn Sie den Emulator nicht verwenden

Ich habe heute das gleiche Problem, ich verwende keinen Emulator, habe aber das USB-Debugging in Mobilgeräten zum Testen aktiviert.

Ich habe keine Daten in meinem Handy eingeschaltet, also habe ich sie erhalten UnknownHostException, sobald ich sie eingeschaltet habe.


0

Wenn Sie ein VPN öffnen, kann dies zu einer "unbekannten Hostausnahme" führen


0

Bei der Verwendung des Emulators trat das gleiche Problem auf, da ich das WLAN auf meinem Laptop geändert habe, sodass ein Neustart des WLAN des Emulators mein Problem löste.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.