Исключение нулевого указателя mapview.onResume - PullRequest
1 голос
/ 11 июля 2019

У меня есть следующее исключение для нулевого указателя

Этот код используется для работы, но я обновил библиотеки GMS как библиотеки androidx

binding.mapView.onResume()
2019-07-11 11:35:05.873 10868-10868/myapp I/DynamiteModule: Considering local module com.google.android.gms.maps_dynamite:0 and remote module com.google.android.gms.maps_dynamite:221
2019-07-11 11:35:05.873 10868-10868/myapp I/DynamiteModule: Selected remote version of com.google.android.gms.maps_dynamite, version >= 221
2019-07-11 11:35:05.935 10868-10868/myapp W/zygote: Skipping duplicate class check due to unrecognized classloader
2019-07-11 11:35:05.998 10868-10868/myapp I/Google Maps Android API: Google Play services client version: 12451000
2019-07-11 11:35:06.016 10868-10868/myapp I/Google Maps Android API: Google Play services package version: 17785018
2019-07-11 11:35:06.216 10868-10868/myapp D/AndroidRuntime: Shutting down VM
2019-07-11 11:35:06.221 10868-10868/myapp E/AndroidRuntime: FATAL EXCEPTION: main
    Process: myapp, PID: 10868
    java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.impl.bt.o()' on a null object reference
        at com.google.maps.api.android.lib6.impl.de.b(:com.google.android.gms.dynamite_mapsdynamite@17785047@17.7.85 (040308-253824076):15)
        at com.google.android.gms.maps.internal.t.a(:com.google.android.gms.dynamite_mapsdynamite@17785047@17.7.85 (040308-253824076):37)
        at hp.onTransact(:com.google.android.gms.dynamite_mapsdynamite@17785047@17.7.85 (040308-253824076):4)
        at android.os.Binder.transact(Binder.java:604)
        at com.google.android.gms.internal.maps.zza.zzb(Unknown Source:20)
        at com.google.android.gms.maps.internal.zzk.onResume(Unknown Source:20)
        at com.google.android.gms.maps.MapView$zza.onResume(Unknown Source:21)
        at com.google.android.gms.dynamic.zag.zaa(Unknown Source:3)
        at com.google.android.gms.dynamic.zaa.onDelegateCreated(Unknown Source:4)
        at com.google.android.gms.maps.MapView$zzb.createDelegate(Unknown Source:16)
        at com.google.android.gms.dynamic.DeferredLifecycleHelper.zaa(Unknown Source:18)
        at com.google.android.gms.dynamic.DeferredLifecycleHelper.onResume(Unknown Source:56)
        at com.google.android.gms.maps.MapView.onResume(Unknown Source:32)
        at myapp.RoomFragment.onResume(RoomFragment.kt:291)
        at androidx.fragment.app.Fragment.performResume(Fragment.java:2644)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:922)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1881)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1827)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
        at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6694)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:769)

Может ли любое тело дать какую-либо подсказку о том, чтопроисходит?

1 Ответ

0 голосов
/ 11 июля 2019

Вот те вещи, которые вам нужно проверить:

  1. Убедитесь, что у вас есть оба из них (у меня были только метаданные ключа API)

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_maps_key" />
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
    

2. У вас есть фрагмент в xml, подобный этому, с атрибутом class, который является правильным, как показано ниже

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

В моем случае фрагмент карты является дочерним, внутри другого фрагмента.

Этот родительский фрагмент, по-видимому, не должен быть MapFragment или SupportMapFragment.После изменения его с SupportMapFragment на Fragment карта показала себя отлично.

public class ParentFragment extends Fragment {

Теперь, если вы используете фрагмент, попробуйте это, -> вместо получения карты в onCreateView, я получил ее в onViewCreatedкак это:

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.rewards_google_map_area);
    if (mapFragment != null) {
        LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
        if (locationManager != null && mapFragment.getMap() != null) {
            googleMap=mapFragment.getMap();
            //after this you do whatever you want with the map
        }
    }

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...