10
votes

Nom d'hôte peut ne pas être null dans httpresponse exécuté pour Android

I Obtenir l'erreur "L'hôte cible ne doit pas être nul ou défini dans les paramètres".

  • je fais strong> avoir une autorisation d'Internet dans mon fichier manifeste li>
  • j'ai mis "http: //" avant mon URL forte> li>
  • je fais strong> coder l'URL li> ul>

    Ceci est mon code: p> xxx pré>

    en ligne 5ème (dernière ligne ci-dessus), mon programme jette une exception. Voici l'erreur exacte: P>

    java.lang.IllegalArgumentException: Host name may not be null
    


4 commentaires

Vous ne pouvez pas avoir d'espaces dans l'URL! laissez-moi voir comment encodez-vous votre URL


Votre problème est probablement dans votre fonction Converturl ... Utilisez un débogueur et vérifiez pour voir ce qui revient.


Salut! Je passais toute l'URL, je l'ai modifiée, mais cela me donne toujours l'erreur ... Goodurl = http://maps.google.com/maps/api/directions/json?origin=3%20c EDAR % 20AVe% 2c% 20High Land% 20park% 2c% 20nj% 2008904 & Destination = 604% 20Bartholomew% 20 Route% 2C% 20piscataway% 2C% 20New% 20jerey% 2 008854 & Sensor = Faux


Ok, alors vous avez raison! Je passais toute l'URL ... Je l'ai réparé mais maintenant ça me donne cette exception! android.os.networkonmainthreadexception mais je peux rechercher ce que cela concerne ... merci!


3 Réponses :


1
votes

Il suffit d'utiliser:

URLEncoder.encode(YOUR_STRING);


0 commentaires

1
votes

Encodez votre chaîne d'URL avant de poster la demande, mais n'encore que les paramètres après le?:

String url = "http://maps.google.com/maps/api/directions/json?";
String params = "origin=1600 Pennsylvania Avenue NW, Washington, DC 20500&destination=1029 Vermont Ave NW, Washington, DC 20005&sensor=false";
HttpClient httpclient = new DefaultHttpClient();
String goodParams = convertURL(params);//change weird characters for %etc
HttpPost httppost = new HttpPost(url + goodParams);
HttpResponse response = httpclient.execute(httppost);


4 commentaires

Je me demande alors si l'UrlenCode codonne tout dans cette chaîne, y compris le nom d'hôte. Dans votre exemple ci-dessus, à quoi ressemble Goodurl? Au lieu de la chaîne, essayez d'utiliser l'objet URL et de définir le nom d'hôte et les ressources en cela.


Salut! Je passais toute l'URL, je l'ai modifiée, mais cela me donnait toujours une erreur ... Goodurl est http://maps.google.com/maps/api/directions/json?origin=3%20c EDAR% 20AVER% 2C% 20High Land% 20park% 2C% 20njj% 2008904 & Destination = 604% 20Bartholomew% 20 Route% 2C% 20piscataway% 2C% 20New% 20jerey% 2 008854 & Sensor = Faux


Ok, alors vous avez raison! Je passais toute l'URL ... Je l'ai réparé mais maintenant ça me donne cette exception! android.os.networkonmainthreadexception mais je peux rechercher ce que cela concerne ... merci!


NetworkonMainThreadEadException est lancée lorsque vous essayez de faire un appel réseau sur le fil principal, car cela affecterait la réactivité de l'interface utilisateur et entraînerait une mauvaise expérience utilisateur. Vous aurez besoin de gérer l'envoi et de recevoir dans un fil d'arrière-plan.



5
votes

Je ne sais pas ce que votre méthode d'encodage URL effectue, mais si vous utilisez une méthode à partir du framework, comme urlencoder , Vous ne devez jamais passer l'URL complète , juste la liste des paramètres que vous devez coder pour échapper aux caractères spéciaux.

codage de l'URL complète Pourcensionnera chaque caractère, y compris le : // dans % 3a% 2f% 2f et toutes les barres obliques supplémentaires dans % 2f < / code>.

Vérifiez la valeur de votre goodurl une chaîne après l'avoir codée.


3 commentaires

Salut! Je passais toute l'URL, je l'ai modifiée, mais cela me donnait toujours une erreur ... Goodurl est http://maps.google.com/maps/api/directions/json?origin=3%20c EDAR% 20AVER% 2C% 20High Land% 20park% 2C% 20njj% 2008904 & Destination = 604% 20Bartholomew% 20 Route% 2C% 20piscataway% 2C% 20New% 20jerey% 2 008854 & Sensor = Faux


Ok, alors vous avez raison! Je passais toute l'URL ... Je l'ai réparé mais maintenant ça me donne cette exception! android.os.networkonmainthreadexception mais je peux rechercher ce que cela concerne ... merci!


"NetworkonMainThreadException" signifie exactement ce qu'il dit. Android ne vous permet pas d'accéder au réseau du fil principal car il bloquera l'interface utilisateur; Vous devez créer un fil d'arrière-plan pour les E / S du réseau. Vous pouvez en apprendre davantage de cet article de formation: développeur.android.com/training /basics/network-ops/index.html