MapFragment или MapView getMap () возвращает значение null на Lollipop

Я давно использую Google Maps API v2 в версиях Android 4.x без проблем. Теперь я установил последнюю версию Lollipop на устройствах Nexus (5 и 7), пытаясь материализовать приложение.

Я хотел бы отметить, что все в порядке с KitKiat, и проблема, которую я описываю, появляется только на Lollipop.

В моем исходном коде XML я использую MapFragment (библиотека Google Play Services версии 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"/> 

В коде Java я переопределяю метод OnPause () для достижения карты:

 GoogleMap map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 

В этой строке он генерирует исключение NullPointerException. В приложении отладчика можно найти фрагмент, однако он не может вернуть GoogleMap. Я также пытался использовать MapView. Он также выбрасывает null. Самое странное для меня – это то, что карта загружается без проблем на самом приложении, а в коде, который я не могу достичь, чтобы работать с ним.

Solutions Collecting From Web of "MapFragment или MapView getMap () возвращает значение null на Lollipop"

У меня была точно такая же проблема, но это то, что сработало для меня:

Замените это …

GoogleMap map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

с этим…

GoogleMap map = getMapFragment().getMap();

Затем проскользните этого плохого мальчика и дайте ему вихрь …

 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); } 

Google теперь сделал более удобный способ получить карту, используя следующий метод

  myMapFragment.getMapAsync(new OnMapReadyCallback) { @Override public void onMapReady(GoogleMap googleMap) { myMap = googleMap; } }); 

Похоже, это может быть проблемой с targetSdkVersion 21: https://code.google.com/p/android-developer-preview/issues/detail?id=1947

Однако переход на getChildFragmentManager () работал на меня:

FindFragmentById для SupportMapFragment возвращает null в Android Studio

Вы пробовали использовать isGooglePlayServicesAvailable, чтобы проверить, почему его возвращает null? Null имеет много причин для getmap, попробуйте использовать это, чтобы проверить, почему его значение null