2009-06-14 7 views
9

J'essaie d'appeler un service web RESTful à partir d'une application Android en utilisant la méthode suivante:Unresolved Exception hôte 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; 

je peux parcourir pour répondre et voir les résultats XML en utilisant le navigateur émulateur Android et de ma machine. J'ai donné à mon application la permission INTERNET.

Je développe avec eclipse.

J'ai vu qu'il est mentionné que je pourrais avoir besoin de configurer un proxy mais puisque le service web que j'appelle est sur le port 80 cela ne devrait pas importer devrait-il? Je peux appeler la méthode avec le navigateur.

Des idées?

+0

Paramètres du proxy ne sera pas question à moins que votre appareil se trouve derrière un serveur proxy. –

+0

C'est ce que je pensais. Je n'arrive toujours pas à le faire fonctionner. –

Répondre

14

Je pense que le problème pourrait être sur la première ligne:

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

Le constructeur HttpHost attend un nom d'hôte comme premier argument, et non pas un nom d'hôte avec un préfixe "http://".

Essayez de supprimer "http://" et il devrait fonctionner:

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

L'erreur signifie que l'URL ne peut pas être résolue via DNS. Ce sont de nombreux problèmes qui pourraient causer cela. Si vous êtes assis derrière un proxy, vous devez le configurer pour être utilisé.

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

Vérifiez aussi que votre internetpermission ressemble à ceci

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

Comme parfois, il ne fonctionnera pas comme balise vide.

Consultez également Emulator Networking et la section des limites il

+0

Je ne suis pas sûr des paramètres de proxy car je ne fais que toucher le port 80 et le navigateur de l'émulateur peut appeler le webservice. –

+0

Cela l'a fait pour moi, en utilisant un HttpGet normal ("http: // host/path"); - Eclipse ne semble pas mettre cette balise XML. Merci! – ndrix

+0

a fonctionné pour moi aussi. –

1

je vérifier que l'autorisation de réseau est configuré correctement. Essayez quelque chose de basique comme

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

pour vérifier que vous avez bien configuré vos droits. Ensuite, utilisez votre analyseur de protocole préféré (je suis un fan de wireshark) pour savoir si vous envoyez les bons paquets. Je crois que vous devez passer l'URL complète à HTTPGet mais je suis seulement environ 80% sûr.

+0

À droite, je peux récupérer des données en utilisant cette méthode. Cependant je ne peux pas comprendre pourquoi le code original ne fonctionne pas. Je ne vois rien dans Fiddler non plus! –

+0

Cette méthode est-elle une méthode valide pour appeler un service Web REST? C'est à dire.consommer le flux d'entrée dans une chaîne? –

+0

C'est une méthode très simple mais elle peut être adéquate en fonction de ce que vous faites. Je ne connais pas violoniste mais je ne suis pas sûr que ce soit la même chose qu'un renifleur de paquets. Je suppose que l'URL ou l'hôte est erroné. Je voudrais essayer de passer dans l'URL complète ("http: //" + ServiceWrapper.SERVER_HOST + "// liste") et voir si cela aide. – hacken

0

Modifier la première ligne dans votre code:

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

C'est la même chose que la réponse acceptée. –

Questions connexes