0

我想找出两个纬度和经度之间的行驶距离。这是我的代码

私人字符串GetDistance(LatLng原点,LatLng dest){

        // 路由的起源
        字符串 str_origin = "origin=" + origin.latitude + ","
                + 原点。经度;
        // 路由目的地
        字符串 str_dest = "destination=" + dest.latitude + "," + dest.longitude;
        // 传感器启用
        字符串传感器=“传感器=假”;
        // 将参数构建到 Web 服务
        字符串参数 = str_origin + "&" + str_dest + "&" + sensor;
        // 输出格式
        字符串输出 = "json";
        // 构建 Web 服务的 url
        字符串 urlString = "https://maps.googleapis.com/maps/api/directions/"
                + 输出 + “?” +参数;

        // 获取 JSON 并对其进行解析以获取路线数据。
        HttpURLConnection urlConnection = null;
        网址网址 = 空;
        尝试 {
            url = 新 URL(urlString.toString());
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoOutput(true);
            urlConnection.setDoInput(true);
            urlConnection.connect();

            InputStream inStream = urlConnection.getInputStream();
            BufferedReader bReader = new BufferedReader(new InputStreamReader(
                    流中));

            字符串温度,响应=“”;
            while ((temp = bReader.readLine()) != null) {
                // 解析数据
                响应 += 温度;
            }
            // 关闭阅读器、流和连接
            bReader.close();
            inStream.close();
            urlConnection.disconnect();

            // 排序 JSON 响应
        // JSONObject object = (JSONObject) new JSONTokener(response)
        // .nextValue();
            JSONObject 对象 = 新 JSONObject(响应);
            JSONArray 数组 = object.getJSONArray("routes");
            // Log.d("JSON","array: "+array.toString());

            // 路由是对象和数组的组合
            JSONObject 路由 = array.getJSONObject(0);
            // Log.d("JSON","routes: "+routes.toString());

            字符串摘要 = routes.getString("summary");
             Log.d("JSON","summary:"+summary);

            JSONArray 腿 = routes.getJSONArray("legs");
            // Log.d("JSON","legs: "+legs.toString());

            JSONObject 步骤 = leg.getJSONObject(0);
            // Log.d("JSON","steps: "+steps.toString());

            JSONObject 距离 = steps.getJSONObject("距离");
            // Log.d("JSON","distance: "+distance.toString());

            sDistance = distance.getString("text");
            iDistance = distance.getInt("值​​");  

        } 捕捉(异常 e){
            // TODO: 处理异常
            返回 e.toString();
        }

        返回 sDistance;
    }

我得到了一个例外

org.json.JSONException: 索引 0 超出范围 [0..0)

这是我的堆栈跟踪

Ljava.lang.StackTraceElement;@41019be8

请帮我解决问题所在。

4

1 回答 1

0

首先,不要硬编码任何位置(如 0)以从数组中获取。Bcs,数组可能为空

你的情况就是这样。您的arraylegs JSONArray 之一是空的,但您正试图获得它们的第 0 个位置。所以,它是抛出索引超出范围异常。

要从数组中获取值,最好使用 for 循环。一个示例代码片段是:

Log.v("array-length--", ""+array.length());

for(int i=0; i < array.length();i++)
{
    // Routes is a combination of objects and arrays
    JSONObject routes = array.getJSONObject(i);
    // Log.d("JSON","routes: "+routes.toString());

    String summary = routes.getString("summary");
    Log.d("JSON","summary: "+summary);

    JSONArray legs = routes.getJSONArray("legs");
    // Log.d("JSON","legs: "+legs.toString());

    Log.v("legs-length--", ""+legs.length());

    for(int j=0; j < legs.length(); j++)
    {
        JSONObject steps = legs.getJSONObject(j);
        // Log.d("JSON","steps: "+steps.toString());

        JSONObject distance = steps.getJSONObject("distance");
        // Log.d("JSON","distance: "+distance.toString());

        sDistance = distance.getString("text");
        iDistance = distance.getInt("value"); 
    }

}
于 2013-10-26T06:42:46.683 回答