web-dev-qa-db-fra.com

Android: UnknownHostException

J'utilise Android SDK 2.2 et teste mon application avec l'émulateur. Je veux envoyer un HTTP Post. Quand je reçois une exception UnknownHostException. J'ai placé les autorisations requises 
<uses-permission Android:name="Android.permission.INTERNET" />
dans le fichier manifest.xml. De plus, je peux ouvrir le navigateur sur l'émulateur et accéder à l'URL sans problème.

Voici mon 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 );
}
68
anisbet

Ok, je me sens plutôt boiteux ... La balise de permission INTERNET est un enfant de la balise manifeste, pas de la balise d'application. Sheesh!

116
anisbet

Pour la considération des autres, je suis tombé sur ce problème et un Google m'a atterri. Comme mentionné par anisbet, j'ai vérifié deux fois mon étiquette d'autorisation et elle était au bon endroit. 

J'ai finalement activé le navigateur intégré à Android et la même réponse a été reçue de mon serveur Web ainsi que de Google.com (alors que l'ordinateur lui-même allait bien). J'ai terminé l'émulateur Android et redémarré; travaillé du premier coup. 

Après avoir examiné votre code, il peut être intéressant de redémarrer l'émulateur. En toute justice pour l'émulateur, un tas de programmes sont tombés en panne peu de temps après, alors peut-être que quelque chose d'autre se passait dans mon ordinateur. Pourtant, cela m'a fait perdre une tonne de temps, alors cela sauvera peut-être le mal de tête que j'ai subi. 

Bonne chance! 

51
Frank V

Assurez-vous d'avoir une connexion Internet. C'est ce qui m'est arrivé lorsque j'ai oublié que je testais avec un téléphone mobile sans connexion Internet.

33
igo

Vous savez ce qui a résolu le problème pour moi était de placer l'autorisation juste avant la balise du manifeste de fermeture, comme ceci:

<uses-permission Android:name="Android.permission.INTERNET" />
</manifest>
17
Moritz

Cela se produit parfois lorsque vous exécutez une application dans l'émulateur. Il suffit de redémarrer l'émulateur pour résoudre le problème. Cela a fonctionné pour moi!

8
java dev

Si rien de ce qui précède ne fonctionne, essayez de prendre du recul et de vous assurer que votre appareil ou votre émulateur peut réellement atteindre Internet en ouvrant un navigateur.

5
diadyne

J'ai couru dans le même problème. J'ai les autorisations correctes dans mon fichier de manifeste Android et l'URL est également correcte. Je reçois la réponse dans le navigateur Web. J'ai redémarré l'EDI, Emulator, mais je n'ai pas résolu le problème. J'ai donc supprimé le fichier AVD à l'aide du gestionnaire AVD, puis démarré l'émulateur et tout a commencé à fonctionner.

2
Vijay

Une dernière vérification serait que votre nom de domaine est un domaine valide. Avoir un soulignement dans un domaine n'est pas valide et lève une exception d'hôte inconnue.

2
tlunter

J'ai rencontré un problème similaire lors du test d'une application ayant une minSdkVersion définie sur 4 et j'essayais de l'exécuter sur un G1. Le changer en 3 résolut le problème pour moi.

2
metric152

Une autre chose: il s’est avéré qu’Internet ne fonctionnait pas pour moi. Le lancement de l'émulateur à partir de la ligne de commande avec ces commutateurs l'a corrigé pour moi: emulator -avd your_avd_name -dns-server 8.8.8.8

1

J'ai vu cette erreur lorsque je suis connecté au WiFi. Dès que j'ai désactivé le WiFi, cela a fonctionné. UnknownHostException pourrait très bien être lancé à cause de ce bogue Android:

http://code.google.com/p/Android/issues/detail?id=67324

0
l33t

Si vous ouvrez un VPN, une "exception d’hôte inconnu" peut en résulter

0
Francis Shi

J'ai rencontré le même problème lors de l'utilisation de l'émulateur, car j'avais changé le wifi sur mon ordinateur portable, donc le redémarrage de l'émulateur a résolu mon problème.

0
Sana

Cochez aussi si vous n'utilisez pas Emulator

J'ai le même problème aujourd'hui, je n'utilise pas Emulator, mais j'active le débogage USB dans les appareils mobiles pour les tests.

Je n'ai pas activé les données sur mon téléphone portable, alors j'ai eu UnknownHostException, une fois que je l'ai activé, cela a été résolu.

0
Saravana