【发布时间】:2018-12-06 19:32:03
【问题描述】:
我在片段中使用谷歌地图(导航抽屉)。当应用程序启动时,第一个片段与谷歌地图一起显示。我已经在 onViewCreated 方法中初始化了谷歌地图。第一次它显示谷歌地图完全符合我的位置,但是当我选择另一个片段并返回到这个片段时,它会抛出空指针异常。
代码中这里抛出异常:
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom));
方法:
private void moveCamera(LatLng latLng, float zoom, String title) {
Log.d(TAG, "moveCamera: moving the camera to: " + latLng.latitude + " lon " + latLng.longitude);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom));
}
OnViewCreated 方法:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
getLocation();
mapView = view.findViewById(R.id.map);
mapView.onCreate(savedInstanceState);
mapView.onResume();
mapView.getMapAsync(this);
}
OnMapReady 方法:
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setMyLocationEnabled(true);
init();
}
private void getLocation() {
Log.d(TAG, "getDeviceLocation: getting the current device's location");
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getContext());
try {
if (mLocationGranted) {
Task location = mFusedLocationProviderClient.getLastLocation();
location.addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
Log.d(TAG, "device location found");
currentLocation = (Location) task.getResult();
moveCamera(new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude()), DEFAULT_ZOOM, "My Location");
} else {
Log.d(TAG, "onComplete: current location is null");
Toast.makeText(getContext(), "unable to get current location", Toast.LENGTH_SHORT).show();
getLocationPermissions();
}
}
});
}
} catch (SecurityException e) {
Log.e(TAG, "SecurityException : " + e.getMessage());
}
}
错误
Exception: java.lang.NullPointerException: Attempt to invoke virtual method
void com.google.android.gms.maps.GoogleMap.moveCamera(com.google.android.gms.map.CameraUpdate)
on a null object reference`
【问题讨论】:
-
你在哪里调用你的方法 moveCamera()?
-
getLocation 方法内部
-
我已经更新了代码。请看一下
标签: android google-maps android-fusedlocation