Подтвердить что ты не робот

Почему google map v2 неожиданно разбился на java.lang.NullPointerException: попытаться получить длину нулевого массива?

У меня проблема, вызванная NullPointerException. Приложение начинает сбой сегодня, когда я пытаюсь выполнить mMapView.onCreate(savedInstanceState);, но вчера все было в порядке. Я просто меняю свой файл макета на другой (похожий) с другим именем. Здесь исключение:

E/AndroidRuntime: FATAL EXCEPTION: главная      Процесс: com.parking.android, PID: 17585                                                                      java.lang.NullPointerException: попытка получить длину нулевого массива                                                                          на maps.G.a.a(Неизвестный источник)                                                                          на картах.В .N.a(Неизвестный источник)                                                                          на maps.D.e.a(Неизвестный источник)                                                                          на maps.D.p.a(Неизвестный источник)                                                                          на maps.ad.ae.a(Неизвестный источник)                                                                          на maps.ad.t.a(Неизвестный источник)                                                                          на maps.ad.R.a(Неизвестный источник)                                                                          в uo.onTransact(: com.google.android.gms.DynamiteModulesB: 66)                                                                          на android.os.Binder.transact(Binder.java:385)                                                                          в com.google.android.gms.maps.internal.IMapViewDelegate $ZZA $zza.onCreate(Неизвестно Источник)                                                                          на com.google.android.gms.maps.MapView $zza.onCreate(Неизвестный источник)                                                                          at com.google.android.gms.dynamic.zza $3.zzb(Неизвестный источник)                                                                          at com.google.android.gms.dynamic.zza $1.zza(Неизвестный источник)                                                                          на com.google.android.gms.maps.MapView $zzb.zzbow(Неизвестный источник)                                                                          at com.google.android.gms.maps.MapView $zzb.zza(Неизвестный источник)                                                                          at com.google.android.gms.dynamic.zza.zza(Неизвестный источник)                                                                          at com.google.android.gms.dynamic.zza.onCreate(Неизвестный источник)                                                                          at com.google.android.gms.maps.MapView.onCreate(Неизвестный источник)                                                                          в com.parking.android.map.fragment.MapsFragment.initMap(MapsFragment.java:105)                                                                          в com.parking.android.map.fragment.MapsFragment.onCreateView(MapsFragment.java:92)                                                                          в com.parking.android.base_arch.fragment.BaseFragment.onCreateView(BaseFragment.java:48)                                                                          в android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)                                                                          в android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)                                                                          в android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)                                                                          в android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742)                                                                          в android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)                                                                          в android.support.v4.app.FragmentManagerImpl $1.run(FragmentManager.java:517)                                                                          на android.os.Handler.handleCallback(Handler.java:815)                                                                          на android.os.Handler.dispatchMessage(Handler.java:104)                                                                          на android.os.Looper.loop(Looper.java:194)                                                                          at android.app.ActivityThread.main(ActivityThread.Java: 5550)                                                                          в java.lang.reflect.Method.invoke(собственный метод)                                                                          в java.lang.reflect.Method.invoke(Method.java:372)                                                                          в com.android.internal.os.ZygoteInit $MethodAndArgsCaller.run(ZygoteInit.java:955)                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:750)

И вот мой код с mapView:

@Override
protected void onCreateView(Bundle savedInstanceState) {
    super.onCreateView(savedInstanceState);
    initMap(savedInstanceState);
}
private void initMap(Bundle savedInstanceState) {
    mMapView.onCreate(savedInstanceState);
    mMapView.onResume();
    try {
        MapsInitializer.initialize(getActContext());
    } catch (Exception e) {
        e.printStackTrace();
    }
    mMapView.getExtendedMapAsync(this);
    locationManager = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
    try {
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 400, 1000, this);
    } catch (SecurityException e) {
        Log.e(TAG, "onLocationChanged: ", e);
    }
}
@Override
public void onPause() {
    mMapView.onPause();
    super.onPause();
}

@Override
public void onResume() {
    super.onResume();
    mMapView.onResume();
}

@Override
public void onDestroy() {
    mMapView.onDestroy();
    super.onDestroy();
}
@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    presenter.getParkings();
    mMap.setOnMarkerClickListener(this);
    mMap.setMyLocationEnabled(true);
    mMap.getUiSettings().setMyLocationButtonEnabled(false);

}
@Override
public void onLocationChanged(Location location) {
    if (mMap == null)
        return;
    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
    CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 14);
    mMap.animateCamera(cameraUpdate);
    try {
        locationManager.removeUpdates(this);
    } catch (SecurityException e) {
        Log.e(TAG, "onLocationChanged: ", e);
    }
}
4b9b3361

Ответ 1

РЕДАКТИРОВАТЬ 2: эта ошибка решается на новейших версиях Карт Google.

EDIT: пользователь указал, что эта ошибка происходит и в устройствах 7.0, поэтому имейте в виду, что вы можете изменить android:maxSdkVersion="22" на подходящую версию Sdk.

Проблема происходит только в устройствах 5.1.1 с пользовательскими ромами, такими как Resurrection Remix. Я не знаю причины, но вы можете решить, добавив это в свой манифест, как показано в fooobar.com/questions/558899/... и fooobar.com/questions/558900/....

<uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="22" />
<uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="22" />

Ответ 3

Я решил его вызвать mapView.on~() с помощью каждого метода жизненного цикла, который реализует MapView. Я не вызывал его во время onPause(), но после этого он работал.