2012-09-21 11 views
10

Pojawia się błąd "Host docelowy nie może mieć wartości NULL ani być ustawiony w parametrach".Nazwa hosta nie może być pusta w wykonaniu HttpResponse dla Androida

  • ZROBIĆ masz uprawnień do internetu w moim pliku manifestu
  • Włożyłem 'http: //' przed mój adres URL
  • ZROBIĆ kodowanie URL

To jest mój kod:

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

W piątym wierszu (ostatni wiersz powyżej) mój program zgłasza wyjątek. tutaj jest dokładna błędu:

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

I Do zakodowania mój ciąg w metodzie 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

Wszelkie sugestie? Dzięki!

+0

Nie można zawierać spacji w adresie URL! pozwól mi zobaczyć, jak kodujesz swój URL – Samer

+0

Twój problem jest prawdopodobnie związany z funkcją convertURL ... użyj debuggera i sprawdź, co powraca. – Joel

+0

Witam! Przesyłam cały adres URL, zmodyfikowałem go, ale nadal daje mi błąd ... 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% 20Nowość% 20Jersey% 2008854 & sensor = false' – cafesanu

Odpowiedz

5

Nie jestem pewien, co adres URL metoda kodowania robi, ale jeśli używasz metody z frameworka takiego jak URLEncoder, , nie powinieneś nigdy przekazywać pełnego adresu URL, tylko listę parametrów, które musisz zakodować, aby uniknąć znaków specjalnych.

Kodowanie pełnego adresu URL spowoduje ucieczkę każdego znaku, w tym :// do %3A%2F%2F i wszystkich dodatkowych ukośników w %2F.

Po kodowaniu spójrz na wartość swojego ciągu goodUrl.

+0

Witam! Przesyłam cały adres URL, zmodyfikowałem go, ale nadal daje mi błąd .... goodURL to '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% 20Nowy% 20Jersey% 2008854 & sensor = false' – cafesanu

+0

OK, więc mieliście rację! Mijam cały URL ... Naprawiłem to, ale teraz daje mi to wyjątek! android.os.NetworkOnMainThreadException, ale mogę sprawdzić, o co chodzi ... Dzięki! – cafesanu

+2

"NetworkOnMainThreadException" oznacza dokładnie to, co mówi. Android nie zezwala na dostęp do sieci z głównego wątku, ponieważ blokuje interfejs użytkownika; musisz utworzyć wątek tła dla operacji we/wy sieci. Możesz dowiedzieć się więcej z tego artykułu szkoleniowego: http://developer.android.com/training/basics/network-ops/index.html – Devunwired

1

Wystarczy użyć:

URLEncoder.encode(YOUR_STRING); 
+0

i Czy koduję mój ciąg w metodzie convertURL ... więc to nie jest problem ... – cafesanu

1

zakodować ciąg URL przed wysłaniem żądania, ale tylko zakodować parametry po:

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 Czy koduję mój ciąg w metodzie convertURL ... więc to nie jest problem ... – cafesanu

+0

Zastanawiam się, czy jeśli URLEncode koduje wszystko w ten ciąg, w tym nazwa hosta. W powyższym przykładzie, jak wygląda goodURL? Zamiast String spróbuj użyć obiektu URL i ustaw w nim nazwę hosta i zasoby. – AWT

+0

Cześć! Przekazałem cały URL, zmodyfikowałem go, ale nadal daje mi błąd ... goodURL to 'http://maps.google.com/maps/api/directions/json?pochodzenie = 3% 20Cedar% 20Za% 2c% 20Highland% 20Park% 2c% 20NJ% 2008904 & destination = 604% 20Bartholomew% 20Road% 2c% 20Piscataway% 2c% 20Nowość% 20Jersey% 2008854 & sensor = false' – cafesanu

Powiązane problemy