java - Google Geocoding API - 查询中存在非法字符

标签 java android google-maps google-geocoding-api

我正在尝试使用 Google 地理编码 API。我似乎无法解决这个问题,即应用程序因“查询中的非法字符”而崩溃。

堆栈跟踪

    10-18 17:13:57.986: E/AndroidRuntime(15822): FATAL EXCEPTION: main
10-18 17:13:57.986: E/AndroidRuntime(15822): Process: com.huddly.main, PID: 15822
10-18 17:13:57.986: E/AndroidRuntime(15822): java.lang.IllegalArgumentException: Illegal character in query at index 63: https://maps.googleapis.com/maps/api/geocode/json?address=Union Beach, NJ, United States&sensor=true
10-18 17:13:57.986: E/AndroidRuntime(15822):    at java.net.URI.create(URI.java:727)
10-18 17:13:57.986: E/AndroidRuntime(15822):    at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75)
10-18 17:13:57.986: E/AndroidRuntime(15822):    at com.huddly.main.CreateSportEventFragmentActivity.getLatLongFromAddress(CreateSportEventFragmentActivity.java:289)
10-18 17:13:57.986: E/AndroidRuntime(15822):    at com.huddly.main.CreateSportEventFragmentActivity.onClick(CreateSportEventFragmentActivity.java:431)

这是我从另一篇标记为“已接受”的帖子中复制并粘贴的代码示例。

private static final String GEOCODING_API_BASE = "https://maps.googleapis.com/maps/api/geocode";
private static final String OUT_JSON = "/json";




    public static void getLatLongFromAddress(String address) {
    StringBuilder sb = new StringBuilder(GEOCODING_API_BASE + OUT_JSON);
    sb.append("?address=" + address);
    //sb.append("&key=" + API_KEY);
    sb.append("&sensor=false");
    String uri = sb.toString();

    HttpGet httpGet = new HttpGet(uri);
    HttpClient client = new DefaultHttpClient();
    HttpResponse response;
    StringBuilder stringBuilder = new StringBuilder();

    try {
        response = client.execute(httpGet);
        HttpEntity entity = response.getEntity();
        InputStream stream = entity.getContent();
        int b;
        while ((b = stream.read()) != -1) {
            stringBuilder.append((char) b);
        }
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    JSONObject jsonObject = new JSONObject();
    try {
        jsonObject = new JSONObject(stringBuilder.toString());

        double lng = ((JSONArray) jsonObject.get("results"))
                .getJSONObject(0).getJSONObject("geometry")
                .getJSONObject("location").getDouble("lng");

        double lat = ((JSONArray) jsonObject.get("results"))
                .getJSONObject(0).getJSONObject("geometry")
                .getJSONObject("location").getDouble("lat");

        Log.e("latitude", "" + lat);
        Log.e("longitude", "" + lng);
    } catch (JSONException e) {
        e.printStackTrace();
    }

}

响应 JOOP EGGEN 的堆栈跟踪

    10-18 18:27:33.307: E/AndroidRuntime(27343): FATAL EXCEPTION: main
10-18 18:27:33.307: E/AndroidRuntime(27343): Process: com.huddly.main, PID: 27343
10-18 18:27:33.307: E/AndroidRuntime(27343): android.os.NetworkOnMainThreadException
10-18 18:27:33.307: E/AndroidRuntime(27343):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1148)
10-18 18:27:33.307: E/AndroidRuntime(27343):    at java.net.InetAddress.lookupHostByName(InetAddress.java:400)
10-18 18:27:33.307: E/AndroidRuntime(27343):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:251)
10-18 18:27:33.307: E/AndroidRuntime(27343):    at java.net.InetAddress.getAllByName(InetAddress.java:229)
10-18 18:27:33.307: E/AndroidRuntime(27343):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
10-18 18:27:33.307: E/AndroidRuntime(27343):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)

    try {
        sb.append("?address=").append(URLEncoder.encode(address, "UTF-8"));
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    };

最佳答案

sb.append("?address=").append(URLEncoder.encode(address, "UTF-8"));

空格应为+%20。人们应该使用正确的编码,但对于空间而言,这并不重要。

关于java - Google Geocoding API - 查询中存在非法字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26444655/

相关文章:

java - 对并行流进行排序时遇到顺序错误

java - 在Android中调用一个变量的Intent

javascript - 如何直接从手机使用 .apk 链接下载 Android 应用程序?

android - 在 Android 谷歌地图中改变方位会使目标位置漂移

google-maps - 使用 fitbounds 时,在 map 范围内包括打开的信息窗口

java - 线程 "main"java.lang.IllegalMonitorStateException 中的异常

Android App ID前缀问题

java - 如何在 Eclipse 中更新到最新版本的 Android 支持库?

android - 在 getMapAsync() 中调用 GoogleMap.getProjection() 时 IllegalArgumentException left == right

java - 分割一个悬空元字符,java?