2014-11-25 2 views
3

Что я делаю: Я пытаюсь сделать обратное геокодирование в андроидеjava.lang.IllegalArgumentException: недопустимый символ в запросе на индексе 59

я получаю сообщение об ошибке, как :: Ява. lang.IllegalArgumentException: недопустимый символ в запросе на индексе 59: http://maps.google.com/maps/api/geocode/json?address=Agram, Бангалор, Карнатака, Индия & датчика = ложный

Примечание: этот запрос получает ответ JSON в браузере, но не из моего класса ниже

Эта линия дает эту ошибку ::

HttpGet httpget = new HttpGet(url); 

JSONfunctions.java

public class JSONfunctions { 

    public static JSONObject getJSONfromURL(String url) { 
     InputStream is = null; 
     String result = ""; 
     JSONObject jArray = null; 

     // Download JSON data from URL 
     try { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpGet httpget = new HttpGet(url); 

      HttpResponse response = httpclient.execute(httpget); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 

     } catch (Exception e) { 
      Log.e("log_tag", "Error in http connection " + e.toString()); 
     } 

     // Convert response to string 
     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      result = sb.toString(); 
     } catch (Exception e) { 
      Log.e("log_tag", "Error converting result " + e.toString()); 
     } 

     try { 

      jArray = new JSONObject(result); 
     } catch (JSONException e) { 
      Log.e("log_tag", "Error parsing data " + e.toString()); 
     } 

     return jArray; 
    } 
} 
+1

Рассмотрите URL-адрес, кодирующий значения вашего URL-адреса. – laalto

+0

@laalto ... Не могли бы вы показать в качестве ответа, я новичок, чтобы делать запросы на кодирование! – Devrath

+0

Возможный дубликат [кодировки URL-адресов Java] (http://stackoverflow.com/questions/10786042/java-url-encoding) – ToYonos

ответ

10

Используйте URLEncoder.encode() для кодирования значения вашего address параметра "Agram, Bengaluru, Karnataka, India" перед вводом это в строке URL, чтобы оно становится чем-то вроде

http://maps.google.com/maps/api/geocode/json?address=Agram,+Bengaluru,+Karnataka,+India&sensor=false 

т.е. пространств изменено на + и других специальных октетов, представленных в виде %xx.

Браузеры умеют кодировать URL-адреса для строк, введенных в адресную строку автоматически, поэтому он работает там.

+0

Когда я пытаюсь это сделать в ответ, я получаю как 'java.lang.IllegalStateException: целевой хост должен не быть нулевым или задаваться в параметрах. schem = null, host = null, ' – Devrath

+1

Не кодируйте весь URL-адрес, просто значение параметра, являющегося частью URL-адреса. – laalto

+0

laalto, который был полезным, thnx. –

5

Построить свой адрес, как,

final StringBuilder request = new StringBuilder(
     "http://maps.googleapis.com/maps/api/geocode/json?sensor=false"); 
request.append("&language=").append(Locale.getDefault().getLanguage()); 
request.append("&address=").append(
     URLEncoder.encode(locationName, "UTF-8")); 
1

I am using httpclient 4.3.3

String messagestr = "Welcome to Moqui World"; 
String url="http://my.example.com/api/sendhttp.phpauthkey="+URLEncoder.encode("17djssnvndkfjb110d3","UTF-8")+"&mobiles=91"+URLEncoder.encode(contactNumber,"UTF-8")+"&message="+URLEncoder.encode(messagestr,"UTF8")+"&sender="+URLEncoder.encode("WMOQUI","UTF-8")+"&route=4"; 

HttpClient client = HttpClientBuilder.create().build(); 
HttpGet request = new HttpGet(url); 
HttpResponse response = client.execute(request); 

Это работает хорошо для меня. Надеюсь, это может вам помочь.