Карты Google с использованием фрагментов - PullRequest
0 голосов
/ 27 июня 2018

Я использую карты 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`

1 Ответ

0 голосов
/ 27 июня 2018

Вы получаете исключение NullPointerException, потому что ваша карта не готова, когда вы пытаетесь переместить ее камеру.

Вы можете попробовать сделать следующее

@Override
public void onMapReady(GoogleMap googleMap) {

  mMap = googleMap;
  mMap.setMyLocationEnabled(true);
  init();

  getLocation();

}

, делая это, ваш код будет просто пытаться переместить камеру карт, когда карта доступна, или изменить логику кода и удалить ваш moveCamere() из метода getLocation() и, например, поместить его в onResume()* 1009. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...