2010-07-22 10 views
67

Estoy usando Android SDK 2.2, probando mi aplicación con el emulador. Quiero enviar una publicación HTTP. Cuando lo hago obtengo una UnknownHostException. He colocado los permisos necesarios
<uses-permission android:name="android.permission.INTERNET" />
en manifest.xml. También puedo abrir el navegador en el emulador y navegar a la URL sin ningún problema.Android: UnknownHostException

Aquí está mi código:

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); 
} 
+0

'} \t \t \t catch (Exception e) \t \t \t { \t \t \t \t System.out.println ("Error:" + e); \t \t \t} \t \t captura (ClientProtocolException e) \t \t { \t \t Log.e ("HttpManager", "ClientProtocolException arrojados" + e); \t \t} \t \t catch (IOException e) { \t \t \t \t Log.e ("HttpManager", "IOException arrojados" + e); \t \t} ' Esto muestra el error indica que ya se trató excepción. –

Respuesta

115

Ok, me siento bastante cojo ... La etiqueta de permisos de Internet es un hijo de la etiqueta de manifiesto, no la etiqueta de solicitud. Sheesh!

+1

Para otros novatos como yo, añadir siguiente en su Manifiesto algún lugar justo después de : infinity

2

Me encontré con un problema similar al probar una aplicación que tenía un minSdkVersion establecido en 4 y estaba tratando de ejecutarlo en un G1. Cambiarlo a 3 resolvió el problema para mí.

+0

bastante extraño, pero que tenía exactamente el mismo problema y el cambio de minSdkVersion me arregló el problema también –

+0

Esto también me funcionó. Tenía minSdkVersion = "7". Lo configuré en "6" y funcionó. – Gagege

51

Para la consideración de los demás, me encontré con este problema y un Google me aterrizó. Como mencioné en anisbet, revisé dos veces mi etiqueta de permiso y estaba en el lugar correcto.

Eventualmente conecté el navegador integrado en Android y recibía la misma respuesta de mi servidor web y de Google.com (mientras que la computadora estaba bien). Terminé el emulador de Android y reinicié; trabajado en el primer intento.

Después de revisar su código, puede valer la pena reiniciar el emulador. Para ser justos con el emulador, un grupo de programas colapsaron poco después de hacer esto, por lo que tal vez sucedía algo más en mi computadora. Aún así, esto desperdició un montón de tiempo para mí, así que tal vez esto le ahorrará a alguien el dolor de cabeza que tuve.

¡Lo mejor de la Suerte!

+0

Lo mismo funciona para la depuración en un dispositivo real; simplemente reinícielo :) –

+0

Parece que el emulador de Android no le gusta algunos cambios de red, incluso el de Intel Gingerbread acelerado por HAXM. Si me muevo de una red WiFi a una alimentada por un MiFi, me da este error y termino reiniciando el emulador. – louielouie

2

Me encontré con el mismo problema. Tengo los permisos correctos en mi archivo de Manifiesto de Android y la URL también es correcta. Estoy recibiendo la respuesta en el navegador web. Reinicié el IDE, Emulator, pero no solucioné el problema. Así que eliminé el AVD usando el administrador de AVD y luego inicié el emulador y comenzó a funcionar.

17

¿Sabe lo resuelto por mí estaba poniendo el permiso antes de la etiqueta manifiesta cierre, así:

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

Si ninguna de las anteriores, intenta dar un paso atrás y asegurarse de que su dispositivo o un emulador puede llegar a Internet abriendo un navegador.

1

Otra cosa: Resultó que Internet no me funcionaba. El lanzamiento del emulador de la línea de comandos con estos conmutadores arreglaron para mí: emulator -avd your_avd_name -dns-server 8.8.8.8

32

Asegúrese de que tiene una conexión a Internet. Eso es lo que me sucedió cuando olvidé que estoy probando con un teléfono móvil sin conexión a Internet.

+0

¡Oh! ¡No puedo creer que este fuera mi problema! ¡Asegúrate de que wifi esté activado cuando utilices dispositivos de prueba adicionales, muchachos! gracias –

+0

Sí, suponía que internet está pasando por el cable de depuración a lo largo de USB pero, por supuesto, va directamente desde el teléfono! – Lukos

+0

Esto es tonto: P .. Tuve el mismo problema ... Gracias – ghostrider

8

Ocurre a veces cuando se ejecuta la aplicación en el emulador. Solo reiniciar el emulador resolverá el problema. ¡Funcionó para mí!

+2

Tan simple pero funcionó tan bien. –

2

Una comprobación final sería que su nombre de dominio es un dominio válido.Tener un guión bajo en un dominio no es válido y lanzará una excepción de host desconocido.

+0

¡Este es un problema raro pero realmente molesto! Vea la explicación [aquí] (http://stackoverflow.com/a/11206362/465942) –

0

Comprobar esto también si usted no está utilizando el emulador

tengo el mismo problema hoy en día, no estoy utilizando el emulador pero habilitada la depuración USB en el móvil para la prueba.

No encendí los datos en mi móvil, así que obtuve UnknownHostException, una vez que lo prendí se resolvió.

0

Si abre una VPN, "Desconocido excepción de host" puede ser el resultado

0

me encontré con el mismo problema cuando se utiliza el emulador, porque he cambiado de wifi en mi ordenador portátil para reiniciar el wifi del emulador resolvió mi problema.

Cuestiones relacionadas