简体   繁体   English

java.lang.IllegalArgumentException:索引59处查询中的非法字符

[英]java.lang.IllegalArgumentException: Illegal character in query at index 59

What i am doing: I am trying to make a reverse geocoding in android 我在做什么:我正在尝试在android中进行反向地理编码

I am getting error as:: java.lang.IllegalArgumentException: Illegal character in query at index 59: http://maps.google.com/maps/api/geocode/json?address=Agram , Bengaluru, Karnataka, India&sensor=false 我收到错误:: java.lang.IllegalArgumentException:索引59的查询中出现非法字符: http//maps.google.com/maps/api/geocode/json? address = Agram ,Bengaluru,Karnataka,India&sensor = false

NOte: that request gets a json response in browser but not from my class below 注意:该请求在浏览器中获得了json响应,但不是来自我的下面的类

This line is giving this error:: 这一行给出了这个错误::

HttpGet httpget = new HttpGet(url);

JSONfunctions.java 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;
    }
}

Use URLEncoder.encode() to encode the value of your address parameter "Agram, Bengaluru, Karnataka, India" before putting it in the URL string so that it becomes something like 使用URLEncoder.encode()address参数"Agram, Bengaluru, Karnataka, India"的值进行编码"Agram, Bengaluru, Karnataka, India"然后将其放入URL字符串中,使其变为类似

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

ie spaces changed to + and other special octets represented as %xx . 即空格更改为+和其他特殊八位字节表示为%xx

Browsers do smart URL encoding for strings entered in the address bar automatically so that's why it works there. 浏览器会自动对地址栏中输入的字符串进行智能URL编码,这就是它在那里工作的原因。

Build your url like, 建立你的网址,如,

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

I am using httpclient 4.3.3 我正在使用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);

It's working fine for me. 它对我来说很好。 I hope this may help you. 我希望这可以帮到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 引起:java.lang.IllegalArgumentException:索引 120 处查询中的非法字符 - Caused by: java.lang.IllegalArgumentException: Illegal character in query at index 120 原因:java.lang.IllegalArgumentException:索引72的查询中的非法字符 - Caused by: java.lang.IllegalArgumentException: Illegal character in query at index 72 java.lang.IllegalArgumentException:方案中索引0处的非法字符: - java.lang.IllegalArgumentException: Illegal character in scheme at index 0: java.lang.IllegalArgumentException:索引 0 处方案中的非法字符:localhost - java.lang.IllegalArgumentException: Illegal character in scheme at index 0: localhost http连接中的错误java.lang.IllegalArgumentException:索引76处的查询中的非法字符 - Error in http connection java.lang.IllegalArgumentException: Illegal character in query at index 76 java.lang.IllegalArgumentException:Android中索引77的查询中的非法字符 - java.lang.IllegalArgumentException:llegal character in query at index 77 in Android java.lang.IllegalArgumentException:发出 https 请求时索引 7 处的非法字符 - java.lang.IllegalArgumentException: Illegal character in authority at index 7 while making https request java.lang.IllegalArgumentException: SimpleDateFormat 的非法模式字符“Y” - java.lang.IllegalArgumentException: Illegal pattern character 'Y' for SimpleDateFormat 无法通过“ java.lang.IllegalArgumentException:路径中的非法字符”发布到URL - Fail to post to URL with “java.lang.IllegalArgumentException: Illegal character in path” java.lang.IllegalArgumentException: 非法字符 (d83d) - java.lang.IllegalArgumentException: Illegal character (d83d)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM