【问题标题】:Exception in finding driving distance between two geopiont查找两个地理点之间的行驶距离时出现异常
【发布时间】:2013-10-26 04:03:01
【问题描述】:

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

私人字符串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:Index 0 out of range [0..0)

这是我的堆栈跟踪

Ljava.lang.StackTraceElement;@41019be8

请帮我看看是什么问题。

【问题讨论】:

  • 在大多数情况下,您只需要查看异常堆栈跟踪,就可以轻松找出问题所在。如果您无法做到这一点,请在此处发布跟踪。

标签: android google-maps


【解决方案1】:

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

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

要从数组中获取值,最好使用 for 循环。示例代码 sn-p 为:

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

}

【讨论】:

    猜你喜欢
    • 2016-07-14
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    相关资源
    最近更新 更多