簡體   English   中英

如何將Google Directions API中的“步驟”解析為Java(Android)

[英]How to parse “steps” from the google directions API to java (android)

我是一個完整的初學者,尤其是談到JSON解析時。

我一直在使用谷歌路線圖API來制作一個基本的導航應用,該應用可以從兩個位置繪制路線,這一切都很棒。 但是,嘗試了幾個小時從API解析“步驟”之后,我仍然無法使其正常工作。

我已使用此示例https://github.com/hiepxuan2008/GoogleMapDirectionSimple解析JSON來繪制路線。

這在下面的代碼中完成。 (在github“ Directionfinder.java”上的完整代碼)

private void parseJSon(String data) throws JSONException {
    if (data == null)
        return;

    List<Route> routes = new ArrayList<Route>();
    JSONObject jsonData = new JSONObject(data);
    JSONArray jsonRoutes = jsonData.getJSONArray("routes");
    for (int i = 0; i < jsonRoutes.length(); i++) {
        JSONObject jsonRoute = jsonRoutes.getJSONObject(i);
        Route route = new Route();

        JSONObject overview_polylineJson = jsonRoute.getJSONObject("overview_polyline");
        JSONArray jsonLegs = jsonRoute.getJSONArray("legs");
        JSONObject jsonLeg = jsonLegs.getJSONObject(0);
        JSONObject jsonDistance = jsonLeg.getJSONObject("distance");
        JSONObject jsonDuration = jsonLeg.getJSONObject("duration");
        JSONObject jsonEndLocation = jsonLeg.getJSONObject("end_location");
        JSONObject jsonStartLocation = jsonLeg.getJSONObject("start_location");

        route.distance = new Distance(jsonDistance.getString("text"), jsonDistance.getInt("value"));
        route.duration = new Duration(jsonDuration.getString("text"), jsonDuration.getInt("value"));
        route.endAddress = jsonLeg.getString("end_address");
        route.startAddress = jsonLeg.getString("start_address");
        route.startLocation = new LatLng(jsonStartLocation.getDouble("lat"), jsonStartLocation.getDouble("lng"));
        route.endLocation = new LatLng(jsonEndLocation.getDouble("lat"), jsonEndLocation.getDouble("lng"));
        route.points = decodePolyLine(overview_polylineJson.getString("points"));

        routes.add(route);
    }

    listener.onDirectionFinderSuccess(routes);
}

以下是JSON通常的外觀。 http://pastebin.com/czYkBWWU

我需要解析“操縱”,“起點位置”,“距離”,“起點位置”以及給定路線每一步的位置。

解析它似乎很容易,但是我不知道如何。

任何幫助將不勝感激!

這是完整的代碼。 我在我的設備上運行它並獲得成功結果。 如果您遇到問題,請告訴我。

try {
            List<Route> routes=new ArrayList<Route>();

            JSONObject mainJSON=new JSONObject(jsonJ);
            JSONArray jarray1=mainJSON.getJSONArray("routes");
            JSONObject jobj1=jarray1.getJSONObject(0);
            JSONArray jarray2=jobj1.getJSONArray("legs");
            JSONObject jobj2=jarray2.getJSONObject(0);
            JSONArray stepArray=jobj2.getJSONArray("steps");

            for (int i=0;i<stepArray.length();i++){
                Route route=new Route();

                JSONObject jobj5=stepArray.getJSONObject(i);
                JSONObject disOBJ=jobj5.getJSONObject("distance");
                JSONObject durOBJ=jobj5.getJSONObject("duration");
                JSONObject endOBJ=jobj5.getJSONObject("end_location");
                JSONObject polOBJ=jobj5.getJSONObject("polyline");
                JSONObject startOBJ=jobj5.getJSONObject("start_location");

                route.startAddress=jobj2.getString("start_address");
                route.endAddress=jobj2.getString("end_address");

                if (jobj5.has("maneuver")){
                    route.maneuver=new Maneuver(jobj5.getString("maneuver"));
                }

                route.distance=new Distance(disOBJ.getString("text"),disOBJ.getString("value"));
                route.duration=new Duration(durOBJ.getString("text"),durOBJ.getString("value"));
                route.startLocation=new LatLng(startOBJ.getDouble("lat"),startOBJ.getDouble("lng"));
                route.endLocation=new LatLng(endOBJ.getDouble("lat"),endOBJ.getDouble("lng"));
                route.points=decodePoluLine(polOBJ.getString("points"));

                routes.add(route);
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM