从地址获取纬度和经度不起作用(InputStream出错)

时间:2016-01-24 16:38:24

标签: android google-maps httpurlconnection inputstreamreader

我正在尝试使用以下代码获取地点的纬度和经度:

public LatLng findAddress(String place) {
        try {
            HttpURLConnection conn = null;
        StringBuilder jsonResults = new StringBuilder();
        String googleMapUrl = "http://maps.googleapis.com/maps/api/geocode/json?address="
                + place + "&sensor=false";

        URL url = new URL(googleMapUrl);
        conn = (HttpURLConnection) url.openConnection();
        InputStreamReader in = new InputStreamReader(conn.getInputStream());
        int read;
        char[] buff = new char[1024];
        while ((read = in.read(buff)) != -1) {
            jsonResults.append(buff, 0, read);
        }
        String a = "";
        StringBuilder sb = jsonResults;
            JSONObject jsonObj = new JSONObject(sb.toString());
            JSONArray resultJsonArray = jsonObj.getJSONArray("results");
            JSONObject before_geometry_jsonObj = resultJsonArray
                    .getJSONObject(0);
            JSONObject geometry_jsonObj = before_geometry_jsonObj
                    .getJSONObject("geometry");
            JSONObject location_jsonObj = geometry_jsonObj
                    .getJSONObject("location");
            String lat_helper = location_jsonObj.getString("lat");
            double lat = Double.valueOf(lat_helper);
            String lng_helper = location_jsonObj.getString("lng");
            double lng = Double.valueOf(lng_helper);
            return new LatLng(lat, lng);
        } catch (Exception e) {

            // TODO Auto-generated catch block
            e.printStackTrace();
            return new LatLng(0,0);
        }

    }

但是当我运行它时,它会进入捕获部分(在

之后)
 conn = (HttpURLConnection) url.openConnection();
 InputStreamReader in = new InputStreamReader(conn.getInputStream());

一部分)。 即使经过一段时间修改代码,我似乎也没有找到这种现象背后的原因。 (我不使用GeoCoder服务的原因是因为它不稳定,需要重新启动我测试过的每台设备)

1 个答案:

答案 0 :(得分:1)

同时我解决了它。 我得到了android.os.NetworkOnMainThreadException,我不应该在主线程上运行网络调用。谢谢大家的帮助。