2009-06-14 16 views
9

Estoy intentando llamar a un servicio web REST desde una aplicación Android usando el siguiente método:sin resolver anfitrión Excepción Android

HttpHost target = new HttpHost("http://" + ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT); 
HttpGet get = new HttpGet("/list"); 
String result = null; 
HttpEntity entity = null; 
HttpClient client = new DefaultHttpClient(); 
try { 
    HttpResponse response = client.execute(target, get); 
    entity = response.getEntity(); 
    result = EntityUtils.toString(entity); 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    if (entity!=null) 
     try { 
      entity.consumeContent(); 
     } catch (IOException e) {} 
} 
return result; 

que puede navegar a tratar y ver los resultados XML utilizando el navegador de Android Emulador y desde mi máquina Le he dado a mi aplicación el permiso de INTERNET.

Estoy desarrollando con eclipse.

Lo he visto mencionar que podría necesitar configurar un proxy, pero dado que el servicio web al que estoy llamando está en el puerto 80, esto no debería importar, ¿o sí? Puedo llamar al método con el navegador.

¿Alguna idea?

+0

configuración de proxy no importará a menos que su dispositivo está detrás de un servidor proxy. –

+0

Eso es lo que estaba pensando. Todavía no puedo hacer que esto funcione. –

Respuesta

14

creo que el problema puede estar en la primera línea:

new HttpHost("http://" + ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT);

El constructor HttpHost espera un nombre de host como primer argumento, no un nombre de host con un prefijo "http://".

Trate de no incluir "http://" y debería funcionar:

new HttpHost(ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT);
3

El error significa que la URL no se puede resolver a través de DNS. Hay muchos problemas que pueden causar esto. Si se sienta detrás de un proxy, debe configurarlo para ser utilizado.

HttpHost proxy = new HttpHost(”proxy”,port,”protocol”); 
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); 

verifique que los internetpermission se parece a esto

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

Como a veces no va a funcionar como etiqueta vacía.

También puedes ver Emulator Networking y la sección de limitaciones no

+0

No estoy seguro de la configuración del proxy ya que solo estoy accediendo al puerto 80 y el navegador del emulador puede llamar al servicio web. –

+0

Esto lo hizo por mí, cuando se usa un HttpGet normal ("http: // host/path"); - Eclipse no parece poner esta etiqueta XML. ¡Gracias! – ndrix

+0

funcionó para mí también. –

1

me vuelva a comprobar que el permiso de red está configurado correctamente. Pruebe algo básico como

String address -"http://www.google.com"; 
URL url = new URL(address);    
InputStream in = url.openStream(); 

para verificar que tenga habilitados los permisos correctos.

Después de eso, use su analizador de protocolo favorito (soy un fan de wireshark) para saber si está enviando los paquetes correctos. Creo que debes pasar la URL completa a HTTPGet, pero estoy solo un 80% seguro.

+0

Bien, puedo recuperar datos usando este método. Sin embargo, no puedo entender por qué el código original no funciona. ¡Tampoco veo nada en Fiddler! –

+0

¿Es este método una forma válida de llamar a un servicio web REST? Es decir.consumiendo el flujo de entrada en una cadena? –

+0

Es un método muy simple pero podría ser adecuado dependiendo de lo que esté haciendo. No estoy familiarizado con el violín, pero no estoy seguro de si es igual a un rastreador de paquetes. Supongo que la URL o el host están equivocados. Intentaría pasar la URL completa ("http: //" + ServiceWrapper.SERVER_HOST + "// list") y ver si eso ayuda. – hacken

0

Cambio primera línea en el código:

HttpHost(ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT); 
+0

Eso es lo mismo que la respuesta aceptada. –

Cuestiones relacionadas