Я использую карты Google в фрагментах (Навигационный ящик). При запуске приложения первый фрагмент отображается с Google Maps. Я инициализировал карты Google в методе onViewCreated. В первый раз он показывает карты Google в полном соответствии с моим местоположением, но когда я выбираю другой фрагмент и возвращаюсь к этому фрагменту, он выдает исключение нулевого указателя.
Исключение выдается здесь в коде:
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());
}
}
Error
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`