El mapa de Google llamado dentro de un fragmento devuelve null

Estoy tratando de poner Map dentro de un fragmento. Estoy pegando los códigos que estoy usando

XML

<fragment android:id="@+id/contactFrag_F_map" android:name="com.google.android.gms.maps.MapFragment" android:layout_width="match_parent" android:layout_height="200dp"/> 

A continuación se muestra mi nombre de fragmento declarado

 public class ContactFragment extends MapFragment 

A continuación se muestra cómo inicialice el mapa

 private void initilizeMap() { if (googleMap == null) { if (googleMap == null) { googleMap = ((MapFragment) getActivity().getFragmentManager().findFragmentById( R.id.contactFrag_F_map)).getMap(); } // check if map is created successfully or not if (googleMap == null) { Toast.makeText(getActivity(), "Sorry! unable to create maps", Toast.LENGTH_SHORT) .show(); } } } 

Y este método fue llamado onCreateView

El error es

 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.GoogleMap com.google.android.gms.maps.MapFragment.getMap()' on a null object reference 

Por favor ayude a resolver este problema. El tema está en la parte inferior

 if (googleMap == null) { googleMap = ((MapFragment) getActivity().getFragmentManager().findFragmentById( R.id.contactFrag_F_map)).getMap(); } 

EDITAR 1

Cambió el xml a

 <fragment android:id="@+id/contactFrag_F_map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="200dp"/> 

y

 public class ContactFragment extends SupportMapFragment 

Y la inicialización

 if (googleMap == null) { googleMap = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById( R.id.contactFrag_F_map)).getMap(); } 

Pero de nuevo el error es

 java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.GoogleMap com.google.android.gms.maps.SupportMapFragment.getMap()' on a null object reference 

Y sucede en la línea

 if (googleMap == null) { googleMap = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById( R.id.contactFrag_F_map)).getMap(); } 

¿Por qué sucedería esto?

EDIT 2

Sí. El getmap está obsoleto. Así que lo intenté

 MapFragment mapFragment = (MapFragment) getChildFragmentManager().findFragmentById(R.id.contactFrag_F_map); mapFragment.getMapAsync(this); 

Y

 public class ContactFragment extends MapFragment implements OnMapReadyCallback { 

Y la devolución de llamada ..

 @Override public void onMapReady(GoogleMap googleMap) { theGoogleMap = googleMap; setUpMap(); } 

Y el método setUpMap

 public void setUpMap(){ theGoogleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); theGoogleMap.setMyLocationEnabled(true); theGoogleMap.setTrafficEnabled(true); theGoogleMap.setIndoorEnabled(true); theGoogleMap.setBuildingsEnabled(true); theGoogleMap.getUiSettings().setZoomControlsEnabled(true); } 

Y el error se muestra en onresume ()

 java.lang.RuntimeException: Unable to resume activity {com.purpletab.daga/com.purpletab.daga.activities.CoreActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.e.fl.o()' on a null object reference 

además

 Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.e.fl.o()' on a null object reference 

5 Solutions collect form web for “El mapa de Google llamado dentro de un fragmento devuelve null”

La solución. Estaba colocando un Fragmento de Mapa dentro de un Fragmento .

Asi que….

Xml que se colocará dentro del fragmento es

  <fragment android:id="@+id/contactFrag_F_map" android:name="com.google.android.gms.maps.MapFragment" android:layout_width="match_parent" android:layout_height="200dp"/> 

Y

 public class ContactFragment extends Fragment implements OnMapReadyCallback { 

Con en onCreateView()

 MapFragment mapFragment = (MapFragment) getChildFragmentManager().findFragmentById(R.id.contactFrag_F_map); mapFragment.getMapAsync(this); 

Y en OnMapReadyCallback

 @Override public void onMapReady(GoogleMap googleMap) { theGoogleMap = googleMap; setUpMap(); } 

Y debajo es el setUpMap.

 public void setUpMap(){ theGoogleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); theGoogleMap.setMyLocationEnabled(true); theGoogleMap.setTrafficEnabled(true); theGoogleMap.setIndoorEnabled(true); theGoogleMap.setBuildingsEnabled(true); theGoogleMap.getUiSettings().setZoomControlsEnabled(true); } 

funciona bien.. 🙂

No

 googleMap = ((MapFragment) getActivity().getFragmentManager().findFragmentById( R.id.contactFrag_F_map)).getMap(); 

Hacer

 googleMap = ((MapFragment) getActivity().getSupportFragmentmanager().findFragmentById( R.id.contactFrag_F_map)).getMap(); 

GetSupportFragmentManager

Devuelve el FragmentManager para interactuar con los fragmentos asociados con esta actividad.

Intenta usar el siguiente código:

 private void initilizeMap() { FragmentManager fm = getSupportFragmentManager(); SupportMapFragment fragment = (SupportMapFragment) fm.findFragmentById(R.id.contactFrag_F_map); if (fragment == null) { fragment = SupportMapFragment.newInstance(); } mapView = fragment.getMap(); } 

En el archivo Xml:

  <fragment android:id="@+id/contactFrag_F_map" class="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="200dp" /> 

En onCreateView

  mMapView.onCreate(savedInstanceState); mMap = mMapView.getMap(); mMap.getUiSettings().setMyLocationButtonEnabled(true); mMap.setMyLocationEnabled(false); 

En xml

  <com.google.android.gms.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/tag_text_header" /> 

En primer lugar, lo estás haciendo todo mal desde el principio – vea getMap :

Este método está obsoleto. Use getMapAsync (OnMapReadyCallback) en su lugar. El método de devolución de llamada le proporciona una instancia de GoogleMap garantizada que no es nula y está lista para utilizarse.

En segundo lugar – parece (sin embargo no estoy seguro) que no está familiarizado con los fragmentos de anidación, leer este NestedFragments .

  • ¿Cómo mostrar pop-up al hacer clic en la superposición de mapa?
  • ¿Todavía es necesario el permiso READ_GSERVICES para Google Maps?
  • ¿Cómo puedo obtener la ubicación del centro en los mapas v2 en Android?
  • Google Maps Android API v2 sólo admite dispositivos con OpenGL ES 2.0 y superior
  • Creación de un menú de mapa de Android para cambiar el tipo de mapa
  • Android Google Maps v2 - Tecla de depuración vs tecla de liberación
  • Esta aplicación IP, de sitio o móvil no está autorizada para utilizar esta clave de API.
  • ¿Existe una funcionalidad como el método onFirstFix en el Android Maps Api V2?
  • Google Maps no puede agregar referencia a los servicios de Google Play
  • ¿Puedo obtener el código fuente de la aplicación Google Maps de Android?
  • Obtener límites de mapa con Android Google Maps
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.