Android java.lang.NullPointerException:CameraUpdateFactory未初始化,正在调用;onResume";

Android java.lang.NullPointerException:CameraUpdateFactory未初始化,正在调用;onResume";,android,android-fragments,android-mapview,android-maps-v2,Android,Android Fragments,Android Mapview,Android Maps V2,我将从细节活动中获取数据,因此我正在“onResume”上更新地图,它正在animateCamera方法上崩溃。我尝试了所有可用的解决方案。请查找以下代码: 异常:java.lang.NullPointerException:CameraUpdateFactory未初始化 private void zoomToShowAllMarkers(final GoogleMap map) { final LatLngBounds.Builder builder = new LatLng

我将从细节活动中获取数据,因此我正在“onResume”上更新地图,它正在animateCamera方法上崩溃。我尝试了所有可用的解决方案。请查找以下代码:

异常:java.lang.NullPointerException:CameraUpdateFactory未初始化

private void zoomToShowAllMarkers(final GoogleMap map) {

        final LatLngBounds.Builder builder = new LatLngBounds.Builder();
        for (MapLocations marker : arrMarkers) {
            final LatLng pos = new LatLng(marker.getLatitude(),marker.getLongitude());
             builder.include(pos);
            map.addMarker(new MarkerOptions().position(pos));

              map.animateCamera(CameraUpdateFactory.newLatLngZoom(pos, 17.0f));

        }
}


public void onResume() {
        super.onResume();
        if(mapView!=null &&  mapView.isShown())
        mapView.onResume();
        zoomToShowAllMarkers(map);
    }

在使用此类中的任何方法之前,必须执行以下操作之一: 请执行以下操作以确保该类已初始化:

  • 等待添加到应用程序中的
    MapFragment
    MapView
    中的
    GoogleMap
    可用。通过调用
    getMap()
    方法并检查返回的对象是否为null,可以验证
    GoogleMap
    是否可用
  • 调用
    初始化(上下文)
    。只要没有抛出
    GooglePlayServicesNotAvailableException
    ,这个类就会 必须正确初始化

您必须确保它已初始化,然后才能对其调用任何方法。

我认为您应该将您的
ZoomToShoWall标记(map)if
语句下的code>方法,因为当您尝试设置动画角色时,您的
映射视图可能是
null
,如下所示:

public void onResume() {
    super.onResume();
    if(mapView!=null &&  mapView.isShown()) {
        mapView.onResume();
        zoomToShowAllMarkers(map);
    }
}

我正在测试的设备有一个过时的Google Play服务版本。为了避免null指针,我只做了一个简单的null检查。当用户试图访问地图时,他们会得到一个提示,说他们已经过时了

private void setupMap() {
    final GoogleMap map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

    MapsInitializer.initialize(this);

    double lat = getIntent().getDoubleExtra("lat", 37.6329946);
    double lng = getIntent().getDoubleExtra("lng", -122.4938344);
    float zoom = getIntent().getFloatExtra("zoom", 15);

    LatLng position = new LatLng(lat, lng);
    if(null != map) {
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(position, zoom));
        map.addMarker(new MarkerOptions().position(position));

        map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
            @Override
            public void onMapLoaded() {
                map.snapshot(new GoogleMap.SnapshotReadyCallback() {
                    @Override
                    public void onSnapshotReady(Bitmap bitmap) {
                        mapLoaded(bitmap);
                    }
                });
            }
        });
    }
}

我删除了下面代码中的GooglePlayServicesNotAvailableException catch子句,原因是出现错误“GooglePlayServicesNotAvailableException的不可访问的catch块。此异常从未从try语句体中抛出”。请尝试{MapsInitializer.initialize(This.getActivity());}catch(GooglePlayServicesNotAvailableException e){e.printStackTrace();}感谢您对@Romadja的支持,问题是我有一个映射初始化的条件,它在onCreate期间没有传递,所以这就是崩溃的原因。通过您的评论,这种错误修复方法进行了更深入的讨论。感谢Romadja。