我将从Detail Activity中获取数据,因此我在“onResume”上更新了Map,并且它在animateCamera方法上崩溃了。我尝试了SO中提供的所有解决方案。请找到以下代码:
异常: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);
}
答案 0 :(得分:2)
来自http://developer.android.com/reference/com/google/android/gms/maps/CameraUpdateFactory.html,
在使用此类中的任何方法之前,您必须执行其中一个方法 以下是为了确保初始化此类:
- 等待
GoogleMap
从您添加到应用程序的MapFragment
或MapView
开始提供。您可以通过调用GoogleMap
方法并检查返回的对象是否为空来验证getMap()
是否可用。- 致电
initialize(Context)
。只要不GooglePlayServicesNotAvailableException
抛出,这个类就会 正确初始化。
你必须确保它已被初始化,然后才能调用它上面的任何方法。
答案 1 :(得分:1)
我认为您应该将zoomToShowAllMarkers(map);
方法放在if
声明下,因为当您尝试使用animateCamera时,mapView
可能是null
,如下所示:
public void onResume() {
super.onResume();
if(mapView!=null && mapView.isShown()) {
mapView.onResume();
zoomToShowAllMarkers(map);
}
}
答案 2 :(得分: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);
}
});
}
});
}
}