Add Json data and save it to Android Studio variable

1

Sorry for the question, it should be simple but I could not make this code work:

I get this Json from here:

link

I use it so that a function draws a polylinea on my map, the function is this:

public class DirectionsJSONParser {
    public List<List<HashMap<String,String>>> parse(JSONObject jObject){
        List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String,String>>>() ;
        JSONArray jRoutes = null;
        JSONArray jLegs = null;
        JSONArray jSteps = null;
        try {
            jRoutes = jObject.getJSONArray("routes");
            for(int i=0;i<jRoutes.length();i++){
                jLegs = ( (JSONObject)jRoutes.get(i)).getJSONArray("legs");
                List path = new ArrayList<HashMap<String, String>>();
                for(int j=0;j<jLegs.length();j++){
                    jSteps = ( (JSONObject)jLegs.get(j)).getJSONArray("steps");
                    for(int k=0;k<jSteps.length();k++){
                        String polyline = "";
                        polyline = (String)((JSONObject)((JSONObject)jSteps.get(k)).get("polyline")).get("points");
                        List<LatLng> list = decodePoly(polyline);
                        for(int l=0;l<list.size();l++){
                            HashMap<String, String> hm = new HashMap<String, String>();
                            hm.put("lat", Double.toString(((LatLng)list.get(l)).latitude) );
                            hm.put("lng", Double.toString(((LatLng)list.get(l)).longitude) );
                            path.add(hm);
                        }
                    }
                    routes.add(path);
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }catch (Exception e){
        }
        return routes;
    }
    private List<LatLng> decodePoly(String encoded) {
        List<LatLng> poly = new ArrayList<LatLng>();
        int index = 0, len = encoded.length();
        int lat = 0, lng = 0;

        while (index < len) {
            int b, shift = 0, result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lat += dlat;

            shift = 0;
            result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lng += dlng;

            LatLng p = new LatLng((((double) lat / 1E5)),
                    (((double) lng / 1E5)));
            poly.add(p);
        }
        return poly;
    }
}

My question is, how can I do to add all the data of routes > legs > distance > "VALUE"

That is, in the first data is "20970", I would like to add that to the following values, 2337,558.37,2280,154 etc ...

And save that sum in a variable, to know the amount of meters measured by the polylinea.

Thank you in advance.

    
asked by Rafael Karasu Lopez 29.03.2018 в 01:12
source

1 answer

0

Define a variable where the values will be stored:

int distanciasTotal = 0;

by obtaining the JSONArray containing the values, in this case the distances "legs", the object "distance" is obtained and then the object containing "value"

This is an example:

 ...
 jLegs = ( (JSONObject)jRoutes.get(i)).getJSONArray("legs");

 for(int a=0;a<jLegs.length();a++){
    //Obtiene objetos dentro de legs
    JSONObject object = jLegs.getJSONObject(a);
    //obtiene objeto distance
    JSONObject objectDistance = object.getJSONObject("distance");
    Log.i(TAG, "valor : " + objectDistance.getInt("value"));
    //Aquí se almacenaría la suma de todos los valores ("value") del objeto "distance".
    distanciasTotal += objectDistance.getInt("value");
 }
...
    
answered by 29.03.2018 / 02:33
source