Map-Fragment (v2) Nullpointer (вопрос под Lollipop?)

Я обнаружил ошибку в своем приложении, когда запускаю ее в Android Lollipop. Логкат говорит:

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 

Эта ошибка отображается только в Android Lollipop, то же самое приложение работает без проблем на других устройствах *.


Вот код:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:id="@+id/map_side_holder" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/BlueGreyL3" android:orientation="horizontal" android:weightSum="100"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/map_margin_left_24dp" android:layout_marginStart="@dimen/map_margin_left_24dp" android:layout_weight="8" android:orientation="vertical"> <!-- MAP --> <fragment android:id="@+id/location_map" class="com.google.android.gms.maps.MapFragment" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout> </LinearLayout> <!-- Ads --> <LinearLayout android:id="@+id/linlay_wrb" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> </LinearLayout> </RelativeLayout> 

Фрагмент Google Map v2 загружен в мой класс LocationFragments.java путем вызова

 // View try { mView = inflater.inflate(R.layout.location_fragment, container, false); sMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.location_map)).getMap(); mSideHolder = (LinearLayout) mView.findViewById(R.id.map_side_holder); 

Я использую AndroidStudio, поэтому здесь build.gradle :

 android { compileSdkVersion 21 buildToolsVersion "21.1.1" defaultConfig { minSdkVersion 15 targetSdkVersion 21 } [...] dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:support-v13:21.0.0' compile 'com.android.support:support-v4:21.0.0' compile 'com.google.android.gms:play-services:5.0.89' } 

И Манифест:

  <!-- Google Play --> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/> <!-- Maps --> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value=""/> 

Я не понимаю, что я сделал неправильно. Возможно ли, что проблема вызвана самим Lollipop?

Заранее спасибо,

Мартин


* Контрольные устройства:

  1. HTC One M8 – 4.4.4 (GPE / API 19) -> работает
  2. Samsung S4 Mini – 4.4.2 (CM11 / API 19) -> работает
  3. Samsung S2 – 4.0.3 (ICS / API 15) -> работает
  4. HTC One M8 – 5.0 (LL / API 20) -> ошибка при загрузке карты
  5. Ошибка Nexus 5 – 5.0 (LL / API 20) -> при загрузке карты

Попробуйте переместить getMap в onResume . Честно говоря, я не знаю точного ответа, его просто проб и ошибок и вуаля! работает.

Но то, что я думаю, переместит его в onResume , убедитесь, что Activity/Fragment создан ( onCreate ) и запущен ( onStart ).

ОБНОВИТЬ

Обновите свои google play services до последней версии.

У меня точно такая же проблема при HTC M8 5.0, но только перемещение кода в onResume не onResume . Вместо этого я обнаружил, что это сработало, если я использовал getChildFragment() вместо обычного getFragmentManager() .

Код, который я теперь использую, чтобы получить ссылку на объект карты (в onResume ):

 MapFragment mapFragment = (MapFragment) getChildFragmentManager().findFragmentById(R.id.mapsfragment_map); if(mapFragment == null){ return; } map = mapFragment.getMap(); 

Надеюсь, это поможет!

У меня такая же проблема. Проблема с FragmentManager. Лучшее решение для меня:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { sMap = ((MapFragment) (getChildFragmentManager().findFragmentById(R.id.location_map)).getMap(); } else { sMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.location_map)).getMap(); } 
Intereting Posts
Обнаружение внезапного восходящего движения в Android Как заставить редактирование EditText выполнять в полноэкранном режиме? Как эффективно читать текстовый файл с плавающей запятой с помощью Java + LibGDX? Включить собственные библиотеки с мобильным Chrome-приложением Передать параметры / параметры adb для задач градиента android (install, connectedCheck и т. Д.) Тип android.content.Context не может быть разрешен. Это косвенно ссылается на требуемые файлы .class Что может быть причиной этого SQLite CursorWindowAllocationException? Есть ли способ дифференцировать нормальное разрушение активности и вызванное вращением? Почему возникает ошибка при объявлении вложенного статического класса фрагмента как частного? Java.lang.ClassNotFoundException: com.intellij.junit5.JUnit5IdeaTestRunner, используя spek в kotlin Как экспортировать векторные векторные чертежи Android XML в другой формат? Android: как интегрировать внешнее устройство сканера штрих-кода в приложение «Моя» Android: поворот и отображение изображения из файла Наблюдаемые дополнения пакета id, addon-google_apis-google-19 'в несовместимом месте Карты Google api v2 приближаются к маркеру