android - que - MapFragment o MapView getMap() devuelve un valor nulo en Lollipop
google play services versions (4)
He estado utilizando la API de Google Maps v2 durante mucho tiempo en las versiones de Android 4.x sin ningún problema. Ahora instalé la última versión de Lollipop en mis dispositivos Nexus (5 y 7) tratando de materializar la aplicación.
Me gustaría señalar que todo está bien en KitKiat y el problema que estoy describiendo está apareciendo solo en Lollipop.
En mi código fuente XML, estoy usando MapFragment (biblioteca de Google Play Services versión 6.1.11).
<fragment android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>
En el código Java, estoy sobrescribiendo el método OnPause () para alcanzar el mapa:
GoogleMap map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
En esta línea lanza NullPointerException. En la aplicación de depuración es capaz de encontrar fragmentos, sin embargo, no puede devolver GoogleMap. También he intentado utilizar MapView. También arroja nula. Lo más extraño para mí es que el mapa se carga sin problemas en la aplicación, pero en el código no puedo alcanzarlo para que funcione.
¿Has probado isGooglePlayServicesAvailable para comprobar por qué está volviendo nulo? null tiene muchas razones en getmap, intenta usar esto para comprobar por qué está dando null
Google ahora hizo una manera más conveniente de obtener el mapa usando el siguiente método
myMapFragment.getMapAsync(new OnMapReadyCallback) {
@Override
public void onMapReady(GoogleMap googleMap) {
myMap = googleMap;
}
});
Parece que esto podría ser un problema con un targetSdkVersion de 21: https://code.google.com/p/android-developer-preview/issues/detail?id=1947
Sin embargo, el cambio a getChildFragmentManager () funcionó para mí:
findFragmentById for SupportMapFragment devuelve null en Android Studio
Tuve exactamente el mismo problema pero esto es lo que funcionó para mí:
Reemplace este ...
GoogleMap map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
con este...
GoogleMap map = getMapFragment().getMap();
luego desliza a este chico malo y dale un giro ...
private MapFragment getMapFragment() {
FragmentManager fm = null;
Log.d(TAG, "sdk: " + Build.VERSION.SDK_INT);
Log.d(TAG, "release: " + Build.VERSION.RELEASE);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
Log.d(TAG, "using getFragmentManager");
fm = getFragmentManager();
} else {
Log.d(TAG, "using getChildFragmentManager");
fm = getChildFragmentManager();
}
return (MapFragment) fm.findFragmentById(R.id.map);
}