java - 为什么谷歌地图 v2 突然被 java.lang.NullPointerException : Attempt to get length of null array? 崩溃

标签 java android google-maps

我有一个由 NullPointerException 引起的问题。 当我尝试执行 mMapView.onCreate(savedInstanceState); 时,应用程序今天开始崩溃; 但昨天还好。我只是将我的布局文件更改为另一个(类似)具有另一个名称的文件。
这是一个异常(exception):

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.parking.android, PID: 17585 java.lang.NullPointerException: Attempt to get length of null array at maps.G.a.a(Unknown Source) at maps.V.N.a(Unknown Source) at maps.D.e.a(Unknown Source) at maps.D.p.a(Unknown Source) at maps.ad.ae.a(Unknown Source) at maps.ad.t.a(Unknown Source) at maps.ad.R.a(Unknown Source) at uo.onTransact(:com.google.android.gms.DynamiteModulesB:66) at android.os.Binder.transact(Binder.java:385) at com.google.android.gms.maps.internal.IMapViewDelegate$zza$zza.onCreate(Unknown Source) at com.google.android.gms.maps.MapView$zza.onCreate(Unknown Source) at com.google.android.gms.dynamic.zza$3.zzb(Unknown Source) at com.google.android.gms.dynamic.zza$1.zza(Unknown Source) at com.google.android.gms.maps.MapView$zzb.zzbow(Unknown Source) at com.google.android.gms.maps.MapView$zzb.zza(Unknown Source) at com.google.android.gms.dynamic.zza.zza(Unknown Source) at com.google.android.gms.dynamic.zza.onCreate(Unknown Source) at com.google.android.gms.maps.MapView.onCreate(Unknown Source) at com.parking.android.map.fragment.MapsFragment.initMap(MapsFragment.java:105) at com.parking.android.map.fragment.MapsFragment.onCreateView(MapsFragment.java:92) at com.parking.android.base_arch.fragment.BaseFragment.onCreateView(BaseFragment.java:48) at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) at android.os.Handler.handleCallback(Handler.java:815) at android.os.Handler.dispatchMessage(Handler.java:104) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5550) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at 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);
    }
}

最佳答案

编辑 2:这个错误在最新版本的谷歌地图上得到解决。

编辑:一位用户指出这个错误也发生在 7.0 设备中,所以请记住,您可以更改 android:maxSdkVersion="22"到适当的 SDK 版本。

该问题仅发生在具有 Resurrection Remix 等自定义 rom 的 5.1.1 设备中。我不知道原因,但是您可以将其添加到 list 中来解决它,如 https://stackoverflow.com/a/39696819/4208583 中所示和 https://stackoverflow.com/a/39724556/4208583 .

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

关于java - 为什么谷歌地图 v2 突然被 java.lang.NullPointerException : Attempt to get length of null array? 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39623625/

相关文章:

java - 在 JavaFX 中使用多个选择框来过滤 ListView

java - Java 中的掷骰子模拟

android - 想要从设备更新抽屉导航中的用户图片

google-maps - ionic 2/3 : Is it possible to open google map APP by passing custom lat- long?

java - 为什么 SharedPreference 在 RecyclerView 中不起作用

java - 在 Java 中使用 RSA 算法加密字符串的问题

android - 无法从 ViewModel 观察实时数据

php - 从 PHP MySQL 连接获取 JSON

google-maps - 有没有办法从电子表格中的地址检索 Google map 经度和纬度?

javascript - 如何在 D3 中实现鼠标滚轮缩放,如带有覆盖和 Ctrl + 滚动事件的 Google Map?