Consulta de MapActivity para el hospital / restaurante más cercano que no funciona

EDIT: ¡Resuelto! Además de la respuesta de Daniel (salvó mi vida), esto es lo que hice:
1. Reemplazó la clase 'MapActivity2' a una clave de API de servidor.
2. Deje que las otras claves en el manifiesto y 'maps_activites.xml. Ser la clave de la API de Android
3. Habilite el siguiente APIS en Google Developer APIS:
API de Google Maps para Android
API de Google Places para Android
Servicio Web de la API de Google Places

4. ¡BOOM! Funcionó. Aquí está el código de mi repositorio github en cualquier caso: https://github.com/bholagabbar/AurumHealthApp
Estoy tratando de recuperar los restaurantes más cercanos de mi ubicación actual. Estoy utilizando el código que encontré en línea aquí . Sin embargo consigo el error siguiente. He colocado el logcat completo para la ejecución y he resaltado los errores en negrita:

11-30 04: 53: 31,000 25292 – 25292 /? I / art: Activación tardía -Xcheck: jni

11-30 04: 53: 31.033 25292 – 25302 /? I / art: El depurador ya no está activo
<> 11 – 30 04: 53: 31,100 25292 – 25311 /? I / GMPM: La medición de la aplicación se está iniciando
11-30 04: 53: 31.109 25292 – 25311 /? E / GMPM: getGoogleAppId falló con el estado: 10
11-30 04: 53: 31.111 25292 – 25311 /? E / GMPM: No es posible subir. Medición de la aplicación desactivada
11-30 04: 53: 31.125 25292 – 25314 /? D / OpenGLRenderer: Utilizar EGL_SWAP_BEHAVIOR_PRESERVED: true`11-30 04: 53: 31.135 25292-25292 /? D / Atlas: Validar mapa …
11-30 04: 53: 31.178 25292 – 25314 /? I / Adreno-EGL:: EGL 1.4 QUALCOMM construir: (Ibddc658e36)
11-30 04: 53: 31.178 25292 – 25314 /? I / Adreno-EGL: Versión del compilador Shader de OpenGL ES: E031.25.03.04
11-30 04: 53: 31.178 25292 – 25314 /? I / Adreno-EGL: Fecha de creación: 08/10/15 Mon
11-30 04: 53: 31.178 25292 – 25314 /? I / Adreno-EGL: Rama local: área de trabajo
11-30 04: 53: 31.178 25292 – 25314 /? I / Adreno-EGL: Remoto Subdivisión:
11-30 04: 53: 31.178 25292 – 25314 /? I / Adreno-EGL: Parches Locales:
11-30 04: 53: 31.178 25292 – 25314 /? I / Adreno-EGL: Reconstruir Rama:
11-30 04: 53: 31.179 25292 – 25314 /? I / OpenGLRenderer: EGL inicializado, versión 1.4
11-30 04: 53: 31.193 25292 – 25314 /? D / OpenGLRenderer: Habilitar modo de depuración 0
11-30 04: 53: 32.663 25292-25292 / com.iotaconcepts.aurum Yo / coreógrafo: ¡Salté 37 cuadros! La aplicación puede estar haciendo demasiado trabajo en su subproceso principal.
11-30 04: 53: 32.737 25292-25314 / com.iotaconcepts.aurum V / RenderScript: Solicitud solicitada Ejecución de la CPU
11-30 04: 53: 32.747 25292-25314 / com.iotaconcepts.aurum V / RenderScript: 0xb7f96960 Inicio de hilos, CPU 4
11-30 04: 53: 36.092 25292-25292 / com.iotaconcepts.aurum D / AndroidRuntime: Apagado de VM
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: EXCEPCIÓN FATAL: principal
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: Proceso: com.iotaconcepts.aurum, PID: 25292
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: java.lang.RuntimeException: No se puede iniciar la actividad ComponentInfo {com.iotaconcepts.aurum / com.iotaconcepts.aurum.MapsActivity2}: java. Lang.NullPointerException: Intenta invocar el método virtual 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync (com.google.android.gms.maps.OnMapReadyCallback)' en una referencia de objeto nulo
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2339)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2413)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.app.ActivityThread.access $ 800 (ActivityThread.java:155)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1317)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.os.Handler.dispatchMessage (Handler.java:102)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.os.Looper.loop (Looper.java:135)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.app.ActivityThread.main (ActivityThread.java:5343)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en java.lang.reflect.Method.invoke (Método nativo)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en java.lang.reflect.Method.invoke (Method.java:372)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:907)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en com.android.internal.os.ZygoteInit.main (ZygoteInit.java:702)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: Causado por: java.lang.NullPointerException: Intenta invocar el método virtual 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync (Com.google.android.gms.maps.OnMapReadyCallback) 'en una referencia de objeto nulo
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en com.iotaconcepts.aurum.MapsActivity2.onCreate (MapsActivity2.java:42)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.app.Activity.performCreate (Activity.java:6010)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1129)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2292)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2413)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.app.ActivityThread.access $ 800 (ActivityThread.java:155)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1317)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.os.Handler.dispatchMessage (Handler.java:102)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.os.Looper.loop (Looper.java:135)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en android.app.ActivityThread.main (ActivityThread.java:5343)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en java.lang.reflect.Method.invoke (Método nativo)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en java.lang.reflect.Method.invoke (Method.java:372)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:907)
11-30 04: 53: 36.093 25292-25292 / com.iotaconcepts.aurum E / AndroidRuntime: en com.android.internal.os.ZygoteInit.main (ZygoteInit.java:702)

He estado perdiendo mi cabeza durante las últimas 2 horas tratando de calcular nuestro error, pero en vano. Aquí está el código para la actividad:

EDIT Después de la corrección, aquí está el código

Paquete com.iotaconcepts.aurum;

import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class MapsActivity2 extends AppCompatActivity implements OnMapReadyCallback { private GoogleMap mGoogleMap; SupportMapFragment mapFrag; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mapFrag = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFrag.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { mGoogleMap=googleMap; mGoogleMap.setMyLocationEnabled(true); StringBuilder sbValue = new StringBuilder(sbMethod()); PlacesTask placesTask = new PlacesTask(); placesTask.execute(sbValue.toString()); } public StringBuilder sbMethod() { //use your current location here double mLatitude = 37.77657; double mLongitude = -122.417506; StringBuilder sb = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?"); sb.append("location=" + mLatitude + "," + mLongitude); sb.append("&radius=5000"); sb.append("&types=" + "restaurant"); sb.append("&sensor=true"); sb.append("&key=AIza************************"); Log.d("Map", "url: " + sb.toString()); return sb; } private class PlacesTask extends AsyncTask<String, Integer, String> { String data = null; // Invoked by execute() method of this object @Override protected String doInBackground(String... url) { try { data = downloadUrl(url[0]); } catch (Exception e) { Log.d("Background Task", e.toString()); } return data; } // Executed after the complete execution of doInBackground() method @Override protected void onPostExecute(String result) { ParserTask parserTask = new ParserTask(); // Start parsing the Google places in JSON format // Invokes the "doInBackground()" method of the class ParserTask parserTask.execute(result); } } private String downloadUrl(String strUrl) throws IOException { String data = ""; InputStream iStream = null; HttpURLConnection urlConnection = null; try { URL url = new URL(strUrl); // Creating an http connection to communicate with url urlConnection = (HttpURLConnection) url.openConnection(); // Connecting to url urlConnection.connect(); // Reading data from url iStream = urlConnection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(iStream)); StringBuffer sb = new StringBuffer(); String line = ""; while ((line = br.readLine()) != null) { sb.append(line); } data = sb.toString(); br.close(); } catch (Exception e) { Log.d("Exception", e.toString()); } finally { iStream.close(); urlConnection.disconnect(); } return data; } private class ParserTask extends AsyncTask<String, Integer, List<HashMap<String, String>>> { JSONObject jObject; // Invoked by execute() method of this object @Override protected List<HashMap<String, String>> doInBackground(String... jsonData) { List<HashMap<String, String>> places = null; Place_JSON placeJson = new Place_JSON(); try { jObject = new JSONObject(jsonData[0]); places = placeJson.parse(jObject); } catch (Exception e) { Log.d("Exception", e.toString()); } return places; } // Executed after the complete execution of doInBackground() method @Override protected void onPostExecute(List<HashMap<String, String>> list) { Log.d("Map", "list size: " + list.size()); // Clears all the existing markers; mGoogleMap.clear(); for (int i = 0; i < list.size(); i++) { // Creating a marker MarkerOptions markerOptions = new MarkerOptions(); // Getting a place from the places list HashMap<String, String> hmPlace = list.get(i); // Getting latitude of the place double lat = Double.parseDouble(hmPlace.get("lat")); // Getting longitude of the place double lng = Double.parseDouble(hmPlace.get("lng")); // Getting name String name = hmPlace.get("place_name"); Log.d("Map", "place: " + name); // Getting vicinity String vicinity = hmPlace.get("vicinity"); LatLng latLng = new LatLng(lat, lng); // Setting the position for the marker markerOptions.position(latLng); markerOptions.title(name + " : " + vicinity); markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)); // Placing a marker on the touched position Marker m = mGoogleMap.addMarker(markerOptions); } } } public class Place_JSON { /** * Receives a JSONObject and returns a list */ public List<HashMap<String, String>> parse(JSONObject jObject) { JSONArray jPlaces = null; try { /** Retrieves all the elements in the 'places' array */ jPlaces = jObject.getJSONArray("results"); } catch (JSONException e) { e.printStackTrace(); } /** Invoking getPlaces with the array of json object * where each json object represent a place */ return getPlaces(jPlaces); } private List<HashMap<String, String>> getPlaces(JSONArray jPlaces) { int placesCount = jPlaces.length(); List<HashMap<String, String>> placesList = new ArrayList<HashMap<String, String>>(); HashMap<String, String> place = null; /** Taking each place, parses and adds to list object */ for (int i = 0; i < placesCount; i++) { try { /** Call getPlace with place JSON object to parse the place */ place = getPlace((JSONObject) jPlaces.get(i)); placesList.add(place); } catch (JSONException e) { e.printStackTrace(); } } return placesList; } /** * Parsing the Place JSON object */ private HashMap<String, String> getPlace(JSONObject jPlace) { HashMap<String, String> place = new HashMap<String, String>(); String placeName = "-NA-"; String vicinity = "-NA-"; String latitude = ""; String longitude = ""; String reference = ""; try { // Extracting Place name, if available if (!jPlace.isNull("name")) { placeName = jPlace.getString("name"); } // Extracting Place Vicinity, if available if (!jPlace.isNull("vicinity")) { vicinity = jPlace.getString("vicinity"); } latitude = jPlace.getJSONObject("geometry").getJSONObject("location").getString("lat"); longitude = jPlace.getJSONObject("geometry").getJSONObject("location").getString("lng"); reference = jPlace.getString("reference"); place.put("place_name", placeName); place.put("vicinity", vicinity); place.put("lat", latitude); place.put("lng", longitude); place.put("reference", reference); } catch (JSONException e) { e.printStackTrace(); } return place; } } } 

El archivo XML es:

  <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:map="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/map" tools:context="com.iotaconcepts.aurum.MapsActivity2" android:name="com.google.android.gms.maps.SupportMapFragment"/> </LinearLayout> 

El archivo del manifiesto:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.iotaconcepts.aurum" > <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-library android:name="com.google.android.maps" /> <!-- uses-permission android:name="android.permission.INTERNET" / --> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/MyMaterialTheme" > <activity android:name=".MainActivity" android:label="Aurum" > <intent-filter> <action android:name="android.intent.action.MAINACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name=".LoginActivity" android:label="Aurum" android:theme="@style/ColorfulActionBarTheme" > <intent-filter> <action android:name="android.intent.action.LOGIN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name=".Splash" android:label="Aurum" android:theme="@style/ColorfulActionBarTheme" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Diagnosis" android:label="Aurum" android:theme="@style/Theme.Transparent" > <intent-filter> <action android:name="android.intent.action.DIAGNOSIS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <!-- The API key for Google Maps-based APIs is defined as a string resource. (See the file "res/values/google_maps_api.xml"). Note that the API key is linked to the encryption key used to sign the APK. You need a different API key for each encryption key, including the release key that is used to sign the APK for publishing. You can define the keys for the debug and release targets in src/debug/ and src/release/. --> <meta-data android:name="com.google.android.geo.API_KEY" android:value="AIza*************************" /> <activity android:name=".MapsActivity2" android:label="@string/title_activity_maps2" > </activity> <activity android:name=".testactivity" > </activity> </application> </manifest> 

Acabo de ejecutar su código y lo tengo trabajando. Parece que el problema principal es que hay un espacio entre la key y su clave api en la url de la consulta.

Tampoco tienes ningún código que llame a getMapAsync() , por lo que no onMapReady() una referencia de mapa y onMapReady() no habría sido llamado.

Además, asegúrese de utilizar una clave de API de servidor con la API de Web de Places.

Aquí está el código que funcionó para mí:

 import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v7.app.AppCompatActivity; import android.util.Log; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class MapsActivity2 extends AppCompatActivity implements OnMapReadyCallback { private GoogleMap mGoogleMap; SupportMapFragment mapFrag; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Wrong one: //setContentView(R.layout.activity_main); //Use this one: setContentView(R.layout.activity_maps2); mapFrag = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFrag.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { mGoogleMap=googleMap; mGoogleMap.setMyLocationEnabled(true); StringBuilder sbValue = new StringBuilder(sbMethod()); PlacesTask placesTask = new PlacesTask(); placesTask.execute(sbValue.toString()); } public StringBuilder sbMethod() { //use your current location here double mLatitude = 37.77657; double mLongitude = -122.417506; StringBuilder sb = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?"); sb.append("location=" + mLatitude + "," + mLongitude); sb.append("&radius=5000"); sb.append("&types=" + "restaurant"); sb.append("&sensor=true"); sb.append("&key=AIza******************************"); Log.d("Map", "url: " + sb.toString()); return sb; } private class PlacesTask extends AsyncTask<String, Integer, String> { String data = null; // Invoked by execute() method of this object @Override protected String doInBackground(String... url) { try { data = downloadUrl(url[0]); } catch (Exception e) { Log.d("Background Task", e.toString()); } return data; } // Executed after the complete execution of doInBackground() method @Override protected void onPostExecute(String result) { ParserTask parserTask = new ParserTask(); // Start parsing the Google places in JSON format // Invokes the "doInBackground()" method of the class ParserTask parserTask.execute(result); } } private String downloadUrl(String strUrl) throws IOException { String data = ""; InputStream iStream = null; HttpURLConnection urlConnection = null; try { URL url = new URL(strUrl); // Creating an http connection to communicate with url urlConnection = (HttpURLConnection) url.openConnection(); // Connecting to url urlConnection.connect(); // Reading data from url iStream = urlConnection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(iStream)); StringBuffer sb = new StringBuffer(); String line = ""; while ((line = br.readLine()) != null) { sb.append(line); } data = sb.toString(); br.close(); } catch (Exception e) { Log.d("Exception", e.toString()); } finally { iStream.close(); urlConnection.disconnect(); } return data; } private class ParserTask extends AsyncTask<String, Integer, List<HashMap<String, String>>> { JSONObject jObject; // Invoked by execute() method of this object @Override protected List<HashMap<String, String>> doInBackground(String... jsonData) { List<HashMap<String, String>> places = null; Place_JSON placeJson = new Place_JSON(); try { jObject = new JSONObject(jsonData[0]); places = placeJson.parse(jObject); } catch (Exception e) { Log.d("Exception", e.toString()); } return places; } // Executed after the complete execution of doInBackground() method @Override protected void onPostExecute(List<HashMap<String, String>> list) { Log.d("Map", "list size: " + list.size()); // Clears all the existing markers; mGoogleMap.clear(); for (int i = 0; i < list.size(); i++) { // Creating a marker MarkerOptions markerOptions = new MarkerOptions(); // Getting a place from the places list HashMap<String, String> hmPlace = list.get(i); // Getting latitude of the place double lat = Double.parseDouble(hmPlace.get("lat")); // Getting longitude of the place double lng = Double.parseDouble(hmPlace.get("lng")); // Getting name String name = hmPlace.get("place_name"); Log.d("Map", "place: " + name); // Getting vicinity String vicinity = hmPlace.get("vicinity"); LatLng latLng = new LatLng(lat, lng); // Setting the position for the marker markerOptions.position(latLng); markerOptions.title(name + " : " + vicinity); markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)); // Placing a marker on the touched position Marker m = mGoogleMap.addMarker(markerOptions); } } } public class Place_JSON { /** * Receives a JSONObject and returns a list */ public List<HashMap<String, String>> parse(JSONObject jObject) { JSONArray jPlaces = null; try { /** Retrieves all the elements in the 'places' array */ jPlaces = jObject.getJSONArray("results"); } catch (JSONException e) { e.printStackTrace(); } /** Invoking getPlaces with the array of json object * where each json object represent a place */ return getPlaces(jPlaces); } private List<HashMap<String, String>> getPlaces(JSONArray jPlaces) { int placesCount = jPlaces.length(); List<HashMap<String, String>> placesList = new ArrayList<HashMap<String, String>>(); HashMap<String, String> place = null; /** Taking each place, parses and adds to list object */ for (int i = 0; i < placesCount; i++) { try { /** Call getPlace with place JSON object to parse the place */ place = getPlace((JSONObject) jPlaces.get(i)); placesList.add(place); } catch (JSONException e) { e.printStackTrace(); } } return placesList; } /** * Parsing the Place JSON object */ private HashMap<String, String> getPlace(JSONObject jPlace) { HashMap<String, String> place = new HashMap<String, String>(); String placeName = "-NA-"; String vicinity = "-NA-"; String latitude = ""; String longitude = ""; String reference = ""; try { // Extracting Place name, if available if (!jPlace.isNull("name")) { placeName = jPlace.getString("name"); } // Extracting Place Vicinity, if available if (!jPlace.isNull("vicinity")) { vicinity = jPlace.getString("vicinity"); } latitude = jPlace.getJSONObject("geometry").getJSONObject("location").getString("lat"); longitude = jPlace.getJSONObject("geometry").getJSONObject("location").getString("lng"); reference = jPlace.getString("reference"); place.put("place_name", placeName); place.put("vicinity", vicinity); place.put("lat", latitude); place.put("lng", longitude); place.put("reference", reference); } catch (JSONException e) { e.printStackTrace(); } return place; } } } 

Activity_maps2.xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:map="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/map" tools:context="com.iotaconcepts.aurum.MapsActivity2" android:name="com.google.android.gms.maps.SupportMapFragment"/> </LinearLayout> 

Resultado:

Introduzca aquí la descripción de la imagen

  • Instrucciones API en Android
  • Convierta la aplicación de Android que utiliza mapas API V1 a Maps Android API V2
  • ¿Cómo mostrar google maps en la vista 2D?
  • Animación de marcadores en Google Maps V2
  • Android Agregar Maps v2 API a Master Detail Flow - Error al inflar el fragmento de clase
  • java.lang.ClassCastException: android.support.v4.app.NoSaveStateFrameLayout no se puede convertir en com.google.android.maps.MapView
  • Custom ViewPager para permitir que el control GoogleMap infantil se desplace horizontalmente
  • Configuración de un LongClickListener en un marcador de mapa
  • GoogleMap en blanco en un dispositivo Android 2.3 con Google API (Lv. 17)
  • Android Google Maps v2 - Añadir objeto al marcador
  • Cómo ejecutar Google Map API V2 en el emulador de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.