2010-08-18 16 views
48

Este código no funciona:Android java.net.UnknownHostException: Host no se ha resuelto

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

todo el tiempo, lo que resulta en una UnknownHostException, incluso cuando existe el anfitrión, ha sido golpeado con éxito utilizando el mismo código si desde un host de desarrollo diferente (máquina), y también desde un navegador.

Probablemente esté fuera de línea haciendo esta pregunta nuevamente, una repetición de Android java.net.UnknownHostException: Host is unresolved (strategy question). El software del foro no me permitió comentar la respuesta insatisfactoria a esa pregunta (con el fin de solicitar más atención a la solución que finalmente encontré). Tal vez aún no soy lo suficientemente popular como para recibir ese privilegio. Mientras tanto, estoy volviendo a publicar la pregunta y una respuesta diferente.

Básicamente, acepto que tal vez el dispositivo Android tenga dificultades con DNS bajo ciertas circunstancias, pero he intentado, por ejemplo, el ejemplo de anddev.org sobre cómo usar el analizador SAX, y funcionó en una máquina Tengo y no en otro.

Editar: Según lo indicado, sé una respuesta que funciona y la publicaré.

Estoy a) haciendo una pregunta (que ya se ha formulado y se ha respondido sin éxito) yb) respondiéndola en beneficio de aquellos para quienes mi respuesta será útil.

+0

¿No tiene idea si hace una pregunta? Haciendo un comentario? O planee responder su propia pregunta ... aclare o la votación para cerrar comenzará. – Nix

+0

Así que, sí, probé la solución para el primer enlace anterior: llamar a InetAddress.getByName (url), pero incluso si lo hacía varias veces, nunca "despertaba" nada en la capacidad del dispositivo para resolver nombres o resolverlos-- Desearía saber, obviamente, qué es lo que está mal, ¡pero parece ser un problema solo para Android! –

+0

@Nix: Respondí tu amenaza en una edición de mi pregunta. Aparentemente, la forma es más importante en este foro que la sustancia? Si no quieres mi respuesta, entonces vete, compañero! Estoy haciendo mi mejor esfuerzo para devolverle al siguiente pobre idiota que, como yo, desperdició su mañana tratando de resolver este problema realmente simple, pero totalmente bloqueante. –

Respuesta

69

La respuesta es endiabladamente simple: elimine y vuelva a crear su AVD (dispositivo virtual/emulador) en Eclipse. Funcionó para mí, la primera vez.

+1

Funcionó para mí también. Creo que mi problema estaba en crear el AVD antes de haber descargado los componentes adicionales para que el SDK/Eclipse funcionara correctamente en una plataforma de Fedora de 64 bits. – DilbertDave

+4

Encontré este hilo porque estaba teniendo exactamente el mismo problema con un dispositivo real. Finalmente descubrí que el dispositivo de alguna manera había encontrado su camino al modo avión, jaja. Así que supongo que la lección aquí sería probar tu conectividad a Internet en el dispositivo si tienes este problema :) – Jarrette

+2

Simplemente reiniciar el dispositivo virtual funcionó para mí. ¡Ojalá lo hubiera intentado después de ~ 2 horas de depuración! –

14

He visto esto en un teléfono también (mientras se realiza la depuración de USB). La solución fue desactivar WiFi y volver a habilitarlo.

+0

Esta fue la solución para mí. Después de probar todas las otras alternativas, entré en mi configuración y apagué el WiFi, luego lo volví a encender. ¡De vuelta a la aplicación, funcionó como un encanto! – svguerin3

3

Muchas gracias Russ. Me alegra que persista. Pasé la mayor parte de una hora leyendo toda clase de soluciones posibles a este error. Solo para cualquiera que encuentre este hilo, resumiré brevemente aquí: -Verifique que el permiso de uso de Internet se encuentre en el manifiesto -Consulte la excepción (inútil) -Cambio de configuraciones de firewall en su OS -Compartición de conexión (solo Windows) Y una carga de otras cosas

Mi arreglo tomó un poco más que el suyo, pero no mucho. Después de leer su publicación, cerré y destruí todos los emuladores. Entonces noté que cuando pasé por encima del botón de ejecución (círculo verde con flecha blanca) decía que el programa ya se estaba ejecutando, ¡aunque no existían AVD (emuladores)! De todos modos, reinicié el eclipse, creé un AVD y lo ejecuté y Bob era el hermano de mi padre. Nada que ver con mi código o configuración.

Lo encontré después. Bien puede lograr lo mismo pero no puedo responderlo a menos que el problema vuelva a ocurrir. http://www.jiahaoliuliu.com/2011/02/stopping-android-applications-already.html Otro truco que/puede/lograr el mismo resultado es marcar "borrar datos de usuario" en Configuraciones de ejecución, pestaña Destino.

55

He seguido los pasos anteriores pero sigo sin tener suerte, finalmente me di cuenta de que mi aplicación no permitía salir de internet en el emulador. Así que solo agregue permisos de usuarios en su archivo de manifiesto. ¡Hecho! Gracias a Józsi ver http://www.helloandroid.com/tutorials/how-download-fileimage-url-your-device

  1. android.permission.INTERNET android.permission.ACCESS_NETWORK_STATE
  2. android.permission.READ_PHONE_STATE
+4

no había agregado "" – sami

5

No pude deshacerme del emulador "UnknownHostExceptions" - y tampoco el navegador del emulador obtuvo una conexión. Intenté todas las sugerencias que pude encontrar en el desbordamiento de la pila y en todos lados.

Finalmente eliminé mi AVD, apagué Eclipse, y luego creé el AVD a través de la línea de comando. Luego lo lanzó a través de la línea de comando con el -dns-server 8.8.8.8. (en mi Mac: ./emulator -avd Google-8 -dns-server 8.8.8.8) ¡Finalmente funcionó!

Espero que esto ayude a alguien más.

3

Mi problema fue cuando compartí Internet desde la computadora a través de WIFI, después de perder la conexión de Ethernet y volver a conectarla no pude lograr la conexión en el teléfono. Esto se solucionó reiniciando el uso compartido de Internet en la computadora.

Espero que ayude a alguien.

2

En mi caso estaba usando una URL basada en el nombre de host con HttpURLConnection. Sin embargo, al usar una url basada en IP, resolvió el problema. También borré/recreé el AVD pero eso no ayudó.

6

Debe habilitar Internet en su emulador.

  • emulador abierto

  • Pulse el botón de menú y "configuración" abierta

  • abierto "wireles y la red" "Redes Móviles"

  • abierto

  • de verificación en "Habilitar datos"

Ahora vuelva a probar su aplicación.

14

En mi caso, estaba descargando un archivo XML de una URL en mi teléfono pero estaba teniendo el problema descrito en este hilo.

para su fijación, que no sólo es necesario tener el permiso habituales de internet

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

pero también necesitaba

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

Como sugerencia para ver si su dispositivo puede necesitar la misma cosa, intente navegar a la URL en el navegador de su teléfono para ver si necesita ayuda con la tarjeta SD o algo así.

Espero que ayude a los demás.

+0

Jajaja, pasé un día intentando depurar algo que da un error como este, pero no me di cuenta de que no lo hice No le doy permiso de Internet. Android ni siquiera da una advertencia diciendo que no tiene permiso. – Muz

2

Acabo de reiniciar el AVD y agregar el Permiso de usuario, entonces funciona.

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

8

Es un trabajo para mí, añadiendo el permiso del usuario para Internet en AndroidMenifest.xml archivo

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

En mi caso, el problema estaba en otra parte.Tenía que:

  • añadir <uses-permission android:name="android.permission.INTERNET" />

  • configurar un servidor proxy en mi emulador: Emulator > settings > wireless and network > Mobile Networks > Access Point Name > "the access point you have ;)". Aquí puede configurar toda la url del puerto proxy y el inicio de sesión/pase que desee.

Y

  • llamar a mi funcionamiento de la red en un hilo separado. La forma más fácil fue implementar una AsynchTask.

he encontrado la solución aquí:.

HTTP doesn't work in Android emulator

"Esta excepción está ahí por una razón actividad de la red puede tomar tiempo, realización de redes en el hilo principal, que es el El mismo hilo que se encarga de actualizar la interfaz de usuario, congelaría el hilo hasta que se termine la conexión (esto es lo que ocurre en cada hilo, pero cuando se realiza en un th leer, está bien). En Android, si el subproceso UI no está activo durante 5 segundos, se mostrará que la aplicación es no responde, ¿Desea cerrarlo? diálogo. "

2

problema resuelto

plazo cd C: \ Archivos de programa \ Android \ android-sdk \ tools

plazo Lista androide AVD en la lista de declaraciones de cmd de ur availabe AVD .... en mi caso su Myabc_avd

plazo emulador @Myabc_avd -dns-servidor 8.8.8.8 cmd ... avd mostrará avd Ve al navegador de AVD y escriba www.google.com mostrará la página de google. u puede ahora acceder navegador usando nombre de host como myfrstapp.com

si todo va bien, puede ejecutar su proyecto utilizando eclipse, pero asegúrese de que se ejecuta en avd que se ejecuta desde cmd.

0

En mi caso acabo de reiniciar el emulador y funcionó.

0

Es tan simple. No hay necesidad de reiniciar Eclipse o borrar y crear emulador, sólo tiene que seguir los pasos que se indican a continuación:

  1. Haga clic derecho en su proyecto
  2. Haga clic en "Ejecutar como"
  3. Haga clic en "Run configuración "
  4. ventana abierta conseguirá
  5. En el panel izquierdo seleccione su configuración de ejecución del proyecto
  6. Luego en el panel de la derecha abierta "Objetivo" pestaña
  7. de desplazamiento hacia abajo
  8. Usted recibirá una opción en la parte inferior llamada "adicionales Los argumentos de línea de comandos del emulador"
  9. Put "-dns-servidor 8.8.8.8 "estos valores (sin comillas dobles) en el cuadro de texto.

Eso es todo ...

0

me encontré con este problema cuando había comenzado el emulador mientras estaba conectado a una VPN. La desconexión de la VPN no tuvo efecto hasta que salí del emulador y reinicié. Es fácil probar si su emulador no está resolviendo nombres correctamente; solo vaya al explorador del emulador y escriba el nombre de host de un sitio web.

Cuestiones relacionadas