Referencia MapView en SupportMapFragment

Tengo un fragmento que extiende SupportMapFragment.

public class PlaceMapsFragment extends SupportMapFragment { private GoogleMap mMap; private LatLng mPosFija; public PlaceMapsFragment() { super(); } public static PlaceMapsFragment newInstance(LatLng posicion) { PlaceMapsFragment frag = new PlaceMapsFragment(); frag.mPosFija = posicion; return frag; } @Override public GoogleMap getMap() { // TODO Auto-generated method stub return super.getMap(); } @Override public void onCreate(Bundle arg0) { // TODO Auto-generated method stub super.onCreate(arg0); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = super.onCreateView(inflater, container, savedInstanceState); //initMap(); return view; } private void initMap() { UiSettings settings = getMap().getUiSettings(); settings.setAllGesturesEnabled(false); settings.setMyLocationButtonEnabled(false); getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(mPosFija, 16)); getMap().addMarker( new MarkerOptions().position(mPosFija) .icon(BitmapDescriptorFactory .fromResource(R.drawable.marker))); } } 

Ahora quiero refernce el MapView que se genera automáticamente de modo que pueda agregar mi funcionalidad al mapa.

Cuando intento initMap(); NullPointerException

Error:

 12-10 02:54:20.171: E/AndroidRuntime(4339): FATAL EXCEPTION: main 12-10 02:54:20.171: E/AndroidRuntime(4339): java.lang.NullPointerException 12-10 02:54:20.171: E/AndroidRuntime(4339): at maps.ar.ba(Unknown Source) 12-10 02:54:20.171: E/AndroidRuntime(4339): at maps.yha(Unknown Source) 12-10 02:54:20.171: E/AndroidRuntime(4339): at maps.y.au.a(Unknown Source) 12-10 02:54:20.171: E/AndroidRuntime(4339): at maps.y.ae.moveCamera(Unknown Source) 12-10 02:54:20.171: E/AndroidRuntime(4339): at com.google.android.gms.maps.internal.IGoogleMapDelegate$Stub.onTransact(IGoogleMapDelegate.java:83) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.os.Binder.transact(Binder.java:297) 12-10 02:54:20.171: E/AndroidRuntime(4339): at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.moveCamera(Unknown Source) 12-10 02:54:20.171: E/AndroidRuntime(4339): at com.google.android.gms.maps.GoogleMap.moveCamera(Unknown Source) 12-10 02:54:20.171: E/AndroidRuntime(4339): at com.m7.nomad.PlaceMapsFragment.initMap(PlaceMapsFragment.java:55) 12-10 02:54:20.171: E/AndroidRuntime(4339): at com.m7.nomad.PlaceMapsFragment.onCreateView(PlaceMapsFragment.java:46) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461) 12-10 02:54:20.171: E/AndroidRuntime(4339): at com.m7.nomad.PlaceActivity$TabManager.onTabChanged(PlaceActivity.java:153) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.widget.TabHost.invokeOnTabChangeListener(TabHost.java:379) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.widget.TabHost.setCurrentTab(TabHost.java:364) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:150) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:540) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.view.View.performClick(View.java:3591) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.view.View$PerformClick.run(View.java:14263) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.os.Handler.handleCallback(Handler.java:605) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.os.Handler.dispatchMessage(Handler.java:92) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.os.Looper.loop(Looper.java:137) 12-10 02:54:20.171: E/AndroidRuntime(4339): at android.app.ActivityThread.main(ActivityThread.java:4507) 12-10 02:54:20.171: E/AndroidRuntime(4339): at java.lang.reflect.Method.invokeNative(Native Method) 12-10 02:54:20.171: E/AndroidRuntime(4339): at java.lang.reflect.Method.invoke(Method.java:511) 12-10 02:54:20.171: E/AndroidRuntime(4339): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 12-10 02:54:20.171: E/AndroidRuntime(4339): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 12-10 02:54:20.171: E/AndroidRuntime(4339): at dalvik.system.NativeStart.main(Native Method) 

Este es un comportamiento esperado.

Puede llamar a getMap() sólo después de que el Fragmento haya pasado por onCreateView() , de lo contrario le dará un null . También puede recibir un null si los servicios de Google Play no están disponibles.

En otras palabras, llame a initMap() en onResume() .

Puedes consultar más aquí .

¡Espero eso ayude!

Finalmente lo resolví, no tienes que sobrescribir getMap() y no necesitas la variable mMap, el GoogleMap está incluido en la clase. Finalmente necesitas llamar a initMap () en onResume:

 public class PlaceMapsFragment extends SupportMapFragment { private LatLng mPosFija = new LatLng(37.878901,-4.779396); public PlaceMapsFragment() { super(); } public static PlaceMapsFragment newInstance(LatLng posicion) { PlaceMapsFragment frag = new PlaceMapsFragment(); frag.mPosFija = posicion; return frag; } @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); initMap(); } @Override public void onCreate(Bundle arg0) { // TODO Auto-generated method stub super.onCreate(arg0); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = super.onCreateView(inflater, container, savedInstanceState); //initMap(); return view; } private void initMap() { UiSettings settings = getMap().getUiSettings(); settings.setAllGesturesEnabled(false); settings.setMyLocationButtonEnabled(false); getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(mPosFija, 16)); getMap().addMarker( new MarkerOptions().position(mPosFija) .icon(BitmapDescriptorFactory .fromResource(R.drawable.marker))); } } 

Espero que ayude a otras personas que están empezando con la v2 de google maps api (como yo: D).

El problema está en el onCreateView. Has olvidado llamar a super.onCreateView (). Compruebe esto

  • GetMapAsync () en el fragmento
  • Error al abrir SupportMapFragment por segunda vez
  • No se puede cambiar el identificador de contenedor del fragmento SupportMapFragment
  • MapFragment.getMap () devuelve null
  • MapFragment que causa NullPointerException en el método getMapAsync (this)
  • Android - SupportMapFragment con GoogleMaps API 2.0 dando IllegalArgumentException
  • ¿Cómo mostrar varios marcadores en MapFragment en Google Map API v2?
  • NullPointerException en mapFragment.getMapAsync
  • Android MapFragment Runtime Error - No se pudo encontrar la clase 'maps.jk'
  • Android GoogleMap o SupportMapFragment - excepción de puntero nulo
  • Android google maps nullpointerexception
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.