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 .

  • El inicio de Backend para móviles subscribeToCloudMessage no funcionará
  • Aplicación móvil de Android: mapas interiores, direcciones para caminar
  • Obtener indicaciones para llegar con la API de Google Maps v2
  • Android Studio Maps Api v2
  • Cómo mostrar los marcadores todo el tiempo por AsyncTask o Handler en google map versión 2
  • ¿Cómo sé que el mapa está listo para utilizarse cuando se utiliza el SupportMapFragment?
  • Android no puede importar servicios de Google Play
  • Atributos Xml en Android Google Maps no funciona con AndroidStudio
  • Restringir resultados de autocompletar por setBoundsBias
  • Mensaje "Los servicios de Google Play se están actualizando" en SupportMapFragment cuando están en modo de publicación
  • Google maps glitch en los teléfonos Motorola
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.