2

我将从Detail Activity中获取数据,因此我正在更新Map on onResume,并且它在animateCamera方法上崩溃。我尝试了所有可用的解决方案。请看以下代码:java.lang.NullPointerException:CameraUpdateFactory未初始化,调用方法on“onResume”

异常:显示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); 
    } 

回答

2

http://developer.android.com/reference/com/google/android/gms/maps/CameraUpdateFactory.html

此前使用从这个类的任何方法,你必须做其中一个 以下确保此类已初始化:

  • 等待GoogleMap将从您添加到应用程序的MapFragmentMapView变为可用。您可以通过调用getMap()方法并检查返回的对象是否为空来验证GoogleMap是否可用。
  • 致电initialize(Context)。只要不抛出GooglePlayServicesNotAvailableException,该类将 正确初始化。

在调用任何方法之前,您必须确保它已被初始化。

+0

我在下面因错误代码中删除GooglePlayServicesNotAvailableException catch子句“无法到达catch块的GooglePlayServicesNotAvailableException。这个异常是永远不会从try语句的身体扔”。 – 2014-11-04 08:04:34

+0

尝试{ \t \t \t \t MapsInitializer.initialize(this.getActivity()); \t \t \t}赶上(GooglePlayServicesNotAvailableException E){ \t \t \t \t e.printStackTrace(); \t \t \t} – 2014-11-04 08:05:12

1

我想你应该把下if声明,原因你zoomToShowAllMarkers(map);方法,当您尝试animateCamera,你mapView可能是null,像这样:

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

感谢您的支持@Romadja,问题是我有一个地图初始化的过程中不通过onCreate,所以这是崩溃的原因。随着您的意见,这个错误修复方法变得更深入。谢谢Romadja。 – 2014-11-04 09:58:12

0

设备我在测试上有过时的版本Google Play服务。为了避免空指针,我只是简单地检查了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); 
        } 
       }); 
      } 
     }); 
    } 
} 
相关问题