GoogleMaps MapView se bloquea enTap en Android?

Actualmente estoy escribiendo una aplicación que muestra un MapView que muestra un mapa de google. He utilizado el tutorial "hello map view" desde http://developer.android.com/resources/tutorials/views/hello-mapview.html y esto funciona hasta ahora: el mapa se muestra, centrado y ampliado correctamente, incluso el OverlayItems Que he añadido se muestran correctamente.

Pero cuando hago clic en uno de esos elementos de superposición que he añadido, la aplicación se bloquea con una excepción de puntero nulo:

07-23 16:24:48.167: ERROR/AndroidRuntime(2530): java.lang.NullPointerException 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at com.android.internal.app.AlertController$AlertParams.<init>(AlertController.java:753) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at android.app.AlertDialog$Builder.<init>(AlertDialog.java:273) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at net.xenonite.wifiloc.act_map$MapItemizedOverlay.onTap(act_map.java:182) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at com.google.android.maps.ItemizedOverlay.onTap(ItemizedOverlay.java:453) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at com.google.android.maps.OverlayBundle.onTap(OverlayBundle.java:83) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at com.google.android.maps.MapView$1.onSingleTapUp(MapView.java:347) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at com.google.android.maps.GestureDetector.onTouchEvent(GestureDetector.java:533) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at com.google.android.maps.MapView.onTouchEvent(MapView.java:647) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at android.view.View.dispatchTouchEvent(View.java:3709) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:874) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:924) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:924) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:924) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:924) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:924) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:924) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1695) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1116) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at android.app.Activity.dispatchTouchEvent(Activity.java:2068) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1679) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at android.view.ViewRoot.handleMessage(ViewRoot.java:1708) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at android.os.Handler.dispatchMessage(Handler.java:99) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at android.os.Looper.loop(Looper.java:123) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at android.app.ActivityThread.main(ActivityThread.java:4595) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at java.lang.reflect.Method.invokeNative(Native Method) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at java.lang.reflect.Method.invoke(Method.java:521) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 07-23 16:24:48.167: ERROR/AndroidRuntime(2530): at dalvik.system.NativeStart.main(Native Method) 

Mi código se copia en su mayor parte del tutorial:

 public class act_map extends MapActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map); intent = getIntent(); lat = intent.getDoubleExtra("lat", 0.0); lng = intent.getDoubleExtra("lng", 0.0); MapView = (MapView) findViewById(R.id.act_map_mapview); List<Overlay> mapOverlays = MapView.getOverlays(); Drawable positionMarker = getResources().getDrawable(R.drawable.act_map_androidmarker); MapItemizedOverlay itemizedOverlay = new MapItemizedOverlay(positionMarker); geoPoint = new GeoPoint((int) (lat * 1000000), (int) (lng * 1000000)); Pointer = new OverlayItem(geoPoint, "Thats me!", "wohooo"); itemizedOverlay.addOverlay(Pointer); mapOverlays.add(itemizedOverlay); MapView.setSatellite(false); MapController = MapView.getController(); MapController.setCenter(geoPoint); MapController.setZoom(18); MapView.setBuiltInZoomControls(true); MapView.displayZoomControls(true); } @Override protected boolean isRouteDisplayed() { return false; } public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_I) { MapView.getController().setZoom(MapView.getZoomLevel() + 1); return true; } else if (keyCode == KeyEvent.KEYCODE_O) { MapView.getController().setZoom(MapView.getZoomLevel() - 1); return true; } else if (keyCode == KeyEvent.KEYCODE_S) { MapView.setSatellite(true); return true; } else if (keyCode == KeyEvent.KEYCODE_M) { MapView.setSatellite(false); return true; } return false; } public class MapItemizedOverlay extends ItemizedOverlay<OverlayItem> { private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); private Context mContext; public MapItemizedOverlay(Drawable defaultMarker) { super(boundCenterBottom(defaultMarker)); } public MapItemizedOverlay(Drawable defaultMarker, Context context) { super(defaultMarker); mContext = context; } public void addOverlay(OverlayItem overlay) { mOverlays.add(overlay); populate(); } @Override protected OverlayItem createItem(int i) { return mOverlays.get(i); } @Override public int size() { return mOverlays.size(); } @Override protected boolean onTap(int index) { OverlayItem item = mOverlays.get(index); AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setTitle(item.getTitle()); dialog.setMessage(item.getSnippet()); dialog.show(); return true; } } 

¿Cómo puedo solucionar esto?

mContext es null . Dado que su superposición es una clase interna de la actividad, reemplace mContext con act_map.this en su AlertDialog constructor AlertDialog .

También tuve un problema con el tutorial de Android MapView. Cuando hice clic en el icono, la pantalla se bloquearía (se pasaría un mContext nulo):

La solución anterior no funcionó para mí. En su lugar, cambié la siguiente línea de código de la clase MapActivity de:

 HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable); 

a esto:

 HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, this); 

También necesita arreglar constructor agregando boundCenterBottom que falta:

 public HelloItemizedOverlay(Drawable defaultMarker, Context context) { super(boundCenterBottom(defaultMarker)); mContext = context; } 

(Tenía hermosas capturas de pantalla pero no puedo publicar porque soy nuevo: P)

Espero que ayude a otros que todavía están teniendo un problema con el tutorial y corrige sus aplicaciones!

Utilice esto en su lugar, es un tutorial mucho mejor que el proporcionado por google.

También llame a populate () en mapoverlay constructor

  • Maps de Android ClusteredMarkers - no muestran unclustered?
  • Marcador v2 de la API de Google Maps de Google Maps con saltos de anclaje personalizados definidos cuando se arrastra
  • Android Google map Excepción de puntero nulo al agregar marcador
  • Marcadores de mapa con texto en Google Maps Android API v2
  • Mueva la posición de la cámara para ajustar LatLngBounds con respecto a la altura del marcador
  • Agregando marcador múltiple en google map en android
  • Refreshing makers (ClusterItems) en Google Maps v2 para Android
  • Activación de un evento de mapa (como un clic de marcador) en Google Maps Android V2
  • Mostrar barra de herramientas para el marcador de Google Maps automáticamente
  • Android google maps marker desactivar la opción de navegación
  • Superposiciones de mapas eficaces en Google Maps de Google
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.