2012-09-21 16 views
10

Ich bekomme den Fehler "Ziel-Host darf nicht Null sein, oder in Parametern".Host-Name darf nicht Null sein in HttpResponse für Android

  • I DO haben Internet Erlaubnis in meinem Manifest-Datei
  • ich gesetzt haben 'http: //' vor meiner URL
  • I DO codieren die URL

Das ist mein Code:

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

In der fünften Zeile (letzte Zeile oben) löst mein Programm eine Ausnahme aus. hier ist die genaue Fehler:

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

I Do meine Zeichenfolge in Methode convertURL ...

goodURL = http://maps.google.com/maps/api/directions/json?origin=3%20Cedar%20Ave%2c%20Highland%20Park%2c%20NJ%2008904&destination=604%20Bartholomew%20Road%2c%20Piscataway%2c%20New%20Jersey%2008854&sensor=false

Irgendwelche Vorschläge kodieren? Danke!

+0

Sie können keine Leerzeichen in der URL haben! lassen Sie mich sehen, wie Sie Ihre URL kodieren – Samer

+0

Ihr Problem ist wahrscheinlich in Ihrer Funktion convertURL ... Verwenden Sie einen Debugger und überprüfen Sie, was das zurückgibt. – Joel

+0

Hallo! Ich übergab die ganze URL, ich änderte es, aber es gibt mir immer noch den Fehler ... goodURL = 'http://maps.google.com/maps/api/directions/json?origin=3%20Cedar%20Ave%2c % 20Highland% 20Park% 2c% 20NJ% 2008904 & Ziel = 604% 20Bartholomew% 20Road% 2c% 20Piscataway% 2c% 20New% 20Jersey% 2008854 & sensor = false' – cafesanu

Antwort

5

Ich bin nicht sicher, was Ihre Methode URL kodieren tut, aber wenn Sie eine Methode aus dem Framework wie URLEncoder, verwenden, sollten Sie nie die vollständige URL übergeben, nur die Parameterliste, die Sie benötigen, um Sonderzeichen zu entschlüsseln.

jedes Zeichen der vollständigen URL Willen Prozent Flucht Encoding, einschließlich der :// in %3A%2F%2F und alle weiteren Schrägstriche in %2F.

Werfen Sie einen Blick auf den Wert Ihrer goodUrl Zeichenkette, nachdem Sie es kodieren.

+0

Hallo! Ich übergab die ganze URL, ich änderte es, aber es gibt mir immer noch einen Fehler .... goodURL ist 'http://maps.google.com/maps/api/directions/json?origin=3%20Cedar%20Ave% 2c% 20Highland% 20Park% 2c% 20NJ% 2008904 & Ziel = 604% 20Bartholomew% 20Road% 2c% 20Piscataway% 2c% 20New% 20Jersey% 2008854 & sensor = false' – cafesanu

+0

Ok, also habt ihr Recht! Ich habe die ganze URL übergeben ... Ich habe es behoben, aber jetzt gibt es mir diese Ausnahme! android.os.NetworkOnMainThreadException, aber ich kann recherchieren, worum es geht ... Danke! – cafesanu

+2

"NetworkOnMainThreadException" bedeutet genau das, was es sagt. Mit Android können Sie keinen Netzwerkzugriff über den Hauptthread ausführen, da dies die Benutzeroberfläche blockieren wird. Sie müssen einen Hintergrundthread für Netzwerk-E/A erstellen. Sie können mehr von diesem Trainingsartikel lernen: http://developer.android.com/training/basics/network-ops/index.html – Devunwired

1

Verwenden Sie einfach:

URLEncoder.encode(YOUR_STRING); 
+0

i Codiere meine Zeichenkette in der Methode convertURL ... also das ist nicht das Problem ... – cafesanu

1

Encode Ihre URL-Zeichenfolge, bevor Sie die Anfrage veröffentlichen, sondern nur die Parameter, nachdem die kodieren:

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

i Codiere meine Zeichenkette in der Methode convertURL ... also das ist nicht das Problem ... – cafesanu

+0

Ich frage mich dann ob URLEncode alles eincodiert diese Zeichenfolge einschließlich des Hostnamens. Wie sieht goodURL in Ihrem obigen Beispiel aus? Versuchen Sie anstelle von String das URL-Objekt zu verwenden, und legen Sie den Hostnamen und die Ressourcen fest. – AWT

+0

Hallo! Ich übergab die ganze URL, ich änderte es, aber es gibt mir immer noch einen Fehler .... goodURL ist 'http://maps.google.com/maps/api/directions/json?Herkunft = 3% 20Cedar% 20Ave% 2C% 20Highland% 20Park% 2C% 20NJ% 2008904 & Ziel = 604% 20Bartholomew% 20Road% 2c% 20Piscataway% 2c% 20New% 20Jersey% 2008854 & sensor = false' – cafesanu

Verwandte Themen