Android java.net.UnknownHostException: l’hôte n’est pas résolu

Ce code ne fonctionne pas:

URL url = new URL( xmlPath ); InputSource input = new InputSource( url.openStream() ); 

Tout le temps, entraînant une exception UnknownHostException, même lorsque l’hôte existe, a été frappé avec succès en utilisant le même code si celui-ci provient d’un autre hôte de développement (ordinateur), et également d’un navigateur.

Je suis probablement hors de propos de poser à nouveau cette question, une répétition de java.net.UnknownHostException Android: Host n’est pas résolu (question de stratégie) . Le logiciel du forum ne me permettait pas de commenter la réponse insatisfaisante à cette question (afin de solliciter plus d’attention à la solution que j’ai finalement trouvée). Je ne suis peut-être pas assez populaire pour avoir ce privilège. En attendant, je repense essentiellement la question et une réponse différente.

Fondamentalement, j’accepte le fait que le périphérique Android rencontre parfois des difficultés avec le DNS dans certaines circonstances, mais j’ai essayé, par exemple l’exemple anddev.org, comment utiliser l’parsingur SAX, et cela a fonctionné sur une seule machine. sur un autre.

Edit: Comme indiqué, je connais une réponse de travail et l’afficherai.

Je suis a) posant une question (cela a déjà été demandé et sans succès) et b) y répondant au profit de ceux pour qui ma réponse sera utile.

La réponse est diablement simple: supprimez, puis recréez votre AVD (périphérique / émulateur virtuel) dans Eclipse. Cela a fonctionné pour moi – la première fois.

J’ai été suivre les étapes ci-dessus, mais toujours pas de chance, enfin je viens de réaliser que mon application ne permettait pas de sortir de l’Internet dans l’émulateur. Il suffit donc d’append les permissions des utilisateurs dans votre fichier manifeste. Terminé! Merci à jozsi voir http://www.helloandroid.com/tutorials/how-download-fileimage-url-your-device

  1. android.permission.INTERNET
  2. android.permission.ACCESS_NETWORK_STATE
  3. android.permission.READ_PHONE_STATE

Je l’ai également vu sur un téléphone (pendant le débogage USB). La solution consistait à désactiver le WiFi et à le réactiver.

Dans mon cas, je téléchargeais un fichier XML à partir d’une URL sur mon téléphone, mais le problème était décrit dans ce fil de discussion.

pour le réparer, je n’avais pas seulement besoin de l’autorisation Internet régulière

  

Mais j’avais aussi besoin de

  

Comme suggestion pour voir si votre appareil peut avoir besoin de la même chose, essayez de naviguer à l’URL dans le navigateur de votre téléphone pour voir si des invites sur la nécessité de la carte SD ou quelque chose.

Espérons que cela aide les autres.

Cela fonctionne pour moi en ajoutant l’autorisation de l’utilisateur pour Internet dans le fichier AndroidMenifest.xml

  

Dans mon cas, le problème était ailleurs. J’ai dû:

  • append

  • configurer un serveur proxy sur mon émulateur: Emulator > settings > wireless and network > Mobile Networks > Access Point Name > "the access point you have ;)" . Ici, vous pouvez définir toutes les URL du port proxy et le login / pass que vous souhaitez.

ET

  • Appelez mon opération réseau dans un thread séparé. Le moyen le plus simple était d’ implémenter une AsynchTask.

J’ai trouvé la solution ici:

HTTP ne fonctionne pas dans un émulateur Android

“Cette exception existe pour une raison: l’activité du réseau peut prendre du temps, la mise en réseau sur le thread principal, qui est le même thread qui met à jour l’UI, gèle le thread jusqu’à ce que le réseau soit thread, mais quand il est exécuté sur un thread dédié, ça va). Dans Android, si l’UI-thread n’est pas actif pendant 5 secondes, l’application ne sera pas réactive, voulez-vous la fermer?

Vous devez activer Internet dans votre émulateur.

  • Émulateur ouvert

  • Appuyez sur le bouton de menu et ouvrez “parameters”

  • Ouvrir “filaire et réseau”

  • Ouvrir “Réseaux Mobiles”

  • Vérifiez sur “Data enable”

Maintenant, testez à nouveau votre application.

Je ne pouvais pas me débarrasser de l’émulateur “UnknownHostExceptions” – et le navigateur de l’émulateur n’aurait pas non plus de connexion. J’ai essayé toutes les suggestions que je pouvais trouver au débordement de la stack et partout ailleurs.

Enfin, j’ai supprimé mon AVD, arrêté Eclipse, puis créé l’AVD via la ligne de commande. Ensuite, il a lancé via la ligne de commande avec le serveur-dns 8.8.8.8. (sur mon Mac: ./emulator -avd Google-8 -dns-server 8.8.8.8) Cela a finalement fonctionné!

J’espère que ceci aide quelqu’un d’autre.

Merci beaucoup Russ. Je suis content que tu aies persisté. J’ai passé la plus grande partie d’une heure à lire toutes sortes de corrections possibles à cette erreur. Juste pour quiconque trébucher sur ce fil, je vais brièvement récapituler ici: -Check Internet utilise la permission est dans le manifeste -Catching l’exception (inutile) -Changer les parameters du pare-feu sur votre connexion OS -Share (Windows uniquement) Et une charge de d’autres choses

Mon correctif a pris un peu plus que le vôtre, mais pas beaucoup. Après avoir lu votre message, j’ai fermé et détruit tous les émulateurs. Ensuite, j’ai remarqué que lorsque je passais la souris sur le bouton d’exécution (cercle vert avec une flèche blanche), il était dit que le programme était déjà en cours d’exécution, même s’il n’existait aucun AVD (émulateur)! Quoi qu’il en soit, a repris eclipse, a créé un AVD et a couru et Bob était le frère de mon père. Rien à voir avec mon code ou ma configuration.

Je l’ai trouvé après. Cela pourrait bien faire la même chose mais je ne peux pas le garantir à moins que le problème ne se reproduise. http://www.jiahaoliuliu.com/2011/02/stopping-android-applications-already.html Une autre astuce qui / peut / obtenir le même résultat est de cocher “effacer les données de l’utilisateur” dans l’onglet Configurations d’exécution, Cible.

Mon problème était lors du partage d’Internet depuis l’ordinateur via le WIFI, après la perte de la connexion Ethernet et la reconnexion, je n’arrivais pas à établir la connexion sur le téléphone. Cela a été corrigé en redémarrant le partage Internet sur l’ordinateur.

J’espère que ça aide quelqu’un.

Dans mon cas, j’utilisais une URL basée sur le nom d’hôte avec HttpURLConnection. Cependant, en utilisant une URL basée IP, résolu le problème. J’ai également supprimé / recréé l’AVD mais cela n’a pas aidé.

Je viens de redémarrer l’AVD et d’append l’autorisation d’utilisateur, alors ça marche.

problème résolu

Exécuter cd C: \ Program Files \ Android \ android-sdk \ tools

exécuter la liste android avd dans cmd retourne la liste de ur availabe avd …. dans mon cas son Myabc_avd

exécutez l’émulateur @Myabc_avd -dns-server 8.8.8.8 dans cmd … avd affichera avd allez dans le navigateur d’avd et tapez http://www.google.com affichera google page. Vous pouvez maintenant accéder au navigateur en utilisant hostname comme myfrstapp.com

Si tout se passe bien, vous pouvez exécuter votre projet en utilisant eclipse, mais assurez-vous qu’il fonctionne dans avd qui s’exécute à partir de cmd.

Dans mon cas, je viens de redémarrer l’émulateur et cela a fonctionné.

C’est si simple Pas besoin de redémarrer Eclipse OU supprimer et créer Emulator, il vous suffit de suivre les étapes ci-dessous:

  1. Clic droit sur votre projet
  2. Cliquez sur ” Exécuter en tant que
  3. Cliquez sur ” Exécuter la configuration
  4. Fenêtre s’ouvrira
  5. Dans le panneau de gauche, sélectionnez la configuration de votre projet
  6. Ensuite, dans le panneau de droite, ouvrez l’onglet ” Cible
  7. Défiler vers le bas
  8. Vous obtiendrez une option en bas appelée ” Arguments supplémentaires pour la ligne de commande de l’émulateur
  9. Mettez ” -dns-server 8.8.8.8 ” ces valeurs ( sans guillemets ) dans la zone de texte.

C’est tout…

J’ai rencontré ce problème lorsque j’ai démarré l’émulateur alors que j’étais connecté à un VPN. La déconnexion du VPN n’a eu aucun effet tant que je n’ai pas quitté l’émulateur et redémarré. Il est facile de tester si votre émulateur ne résout pas correctement les noms. Accédez simplement au navigateur de l’ émulateur et entrez le nom d’hôte du site Web.