Análisis de JSON desde la API de dirección de Google
Quiero analizar paso a paso la dirección desde el punto de inicio hasta el punto final en el mapa de google. para analizar, utilizo el siguiente enlace:
API de dirección de mapa de Google
- ¿No funciona el envío de un paquete sin formato a un NetworkInterface en Android?
- Tratar de obtener nombres de dispositivos de red con dns inversos en Android
- Validación de la entrada de dirección en Android
- Android: Geocodificación inversa - getFromLocation
- Android EditText android: textDirection
en ese enlace quiero analizar "maniobra" json array.
¿cómo puedo obtener paso a paso la dirección de ese archivo json y dónde debo cambiar en mi código? thanx de antemano … aparte de esto mi código se muestra a continuación:
public class **DirectionsJSONParser** { /** Receives a JSONObject and returns a list of lists containing latitude and longitude */ 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"); /** Traversing all routes */ for(int i=0;i<jRoutes.length();i++){ jLegs = ( (JSONObject)jRoutes.get(i)).getJSONArray("legs"); List path = new ArrayList<HashMap<String, String>>(); /** Traversing all legs */ for(int j=0;j<jLegs.length();j++){ jSteps = ( (JSONObject)jLegs.get(j)).getJSONArray("steps"); /** Traversing all 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); /** Traversing all points */ 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; } }
- Desplazamiento Dirección en ViewPager
- ¿Cómo programar el uso del mapa en android para mostrar la dirección?
- Formateo de direcciones basado en locale en android
- Cómo saber la dirección de dos puntos geográficos
- Utilizar la API de dirección de GoogleMap o MapBox para implementar mi propia navegación en mi aplicación
- Como encontrar la dirección de la señal wifi de otro dispositivo en android?
- Android SimpleOnPageChangeListener - Determina la dirección de desplazamiento
- Rotar el marcador en función de la dirección de conducción
Primero tienes que entender acerca de JSONArray
y JSONObject
, puedes seguir android-json-parsing-tutorial para el análisis de JSON.
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"); /** Traversing all routes */ for(int i=0;i<jRoutes.length();i++){ jLegs = ( (JSONArray)jRoutes.get(i)).getJSONArray("legs"); List path = new ArrayList<HashMap<String, String>>(); /** Traversing all legs */ for(int j=0;j<jLegs.length();j++){ jSteps = ( (JSONArray)jLegs.get(j)).getJSONArray("steps"); /** Traversing all steps */ for(int k=0;k<jSteps.length();k++){ String html_instructions = jSteps.get(k).getString("html_instructions"); String travel_mode = jSteps.get(k).getString("travel_mode"); String maneuver = jSteps.get(k).getString("maneuver"); String distance_text = jSteps.get(k).getJSONObject("distance").getString("text"); String distance_value = jSteps.get(k).getJSONObject("distance").getString("value"); String duration_text = jSteps.get(k).getJSONObject("duration").getString("text"); String duration_value = jSteps.get(k).getJSONObject("duration").getString("value"); String start_lat = jSteps.get(k).getJSONObject("start_location").getString("lat"); String start_lon = jSteps.get(k).getJSONObject("start_location").getString("lng"); String end_lat = jSteps.get(k).getJSONObject("end_location").getString("lat"); String end_lon = jSteps.get(k).getJSONObject("end_location").getString("lng"); String polyline = ""; polyline = (String)((JSONObject)((JSONObject)jSteps.get(k)).get("polyline")).get("points"); List<LatLng> list = decodePoly(polyline); /** Traversing all points */ 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; }
- ¿Cómo puedo mostrar una imagen que acabo de sacar de mi cámara en mi aplicación Android?
- Google Plus GoogleApiClient connect () sin diálogo de selección de cuenta