Неустранимая ошибка, вызванная пустой ссылкой на объект из CameraUpdateFactory - PullRequest
0 голосов
/ 06 июня 2018

Я получаю эту фатальную ошибку в моем приложении, вызванную пустой ссылкой на объект.

06-06 14:10:43.180 12002-12002/? D/BarreChat: 29.356811:-57.3686681:lat/lng: 
(29.356811,-57.3686681):com.google.android.gms.maps.CameraUpdate@a16f2f9
06-06 14:10:43.181 12002-12002/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.christopher.barrechat, PID: 12002
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.GoogleMap.moveCamera(com.google.android.gms.maps.CameraUpdate)' on a null object reference
    at com.example.christopher.barrechat.BarreChat$1.onComplete(BarreChat.java:276)
    at com.google.android.gms.tasks.zzj.run(Unknown Source:23)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:180)
    at android.app.ActivityThread.main(ActivityThread.java:6950)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:835)
06-06 14:10:43.182 2867-15345/? E/ActivityManager: App crashed! Process: com.example.christopher.barrechat

Это код, который выдает сообщение об ошибке.Вы можете видеть, что я добавил несколько отладочных операторов, чтобы попытаться выяснить, что происходит.Все эти операторы находятся в объединенной строке в первой строке сообщения об ошибке, которое я опубликовал.Все операторы отладки дают именно то, что я ожидал.Все они, кроме объекта CameraUpdate, у которого есть ссылка, но нет другой информации рядом с ней.Это действительно сбивает меня с толку, хотя.CameraUpdateFactory.newLatLngZoom () передает нулевой объект, но параметры именно то, что он ищет.Если бы miniMap (Google Map Object) не был инициализирован, я бы подумал, что он даже не распознает CameraUpdateFactory.Любая помощь по этому вопросу будет принята с благодарностью.

private void getDeviceLocation() {
    /*
     * Get the best and most recent location of the device, which may be null in rare
     * cases when a location is not available.
     */
    try {
        if (mLocationPermissionGranted) {
            Task<Location> locationResult = mFusedLocationProviderClient.getLastLocation();
            locationResult.addOnCompleteListener(this, new OnCompleteListener<Location>() {
                @Override
                public void onComplete(@NonNull Task<Location> task) {
                    if (task.isSuccessful()) {
                        mLastKnownLocation = task.getResult();
                        //DEBUG
                        //Both give correct double
                        String errormess = Double.toString(mLastKnownLocation.getLatitude());
                        String errormesstwo = Double.toString(mLastKnownLocation.getLongitude());
                        //Gives a proper LatLng Object
                        String errormessthree = String.valueOf(new LatLng(mLastKnownLocation.getLatitude(), mLastKnownLocation.getLongitude()));
                        //Gives a reference and nothing else...  Not working...
                        CameraUpdate SHYAT = CameraUpdateFactory.newLatLngZoom(new LatLng(mLastKnownLocation.getLatitude(), mLastKnownLocation.getLongitude()), DEFAULT_ZOOM);
                        String errormessfour = String.valueOf(SHYAT);
                        Log.d(TAG, errormess + ':' + errormesstwo + ':' + errormessthree + ':' + errormessfour);
                        miniMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
                                new LatLng(mLastKnownLocation.getLatitude(),
                                        mLastKnownLocation.getLongitude()), DEFAULT_ZOOM));
                    } else {
                        Log.d(TAG, "Current location is null. Using defaults.");
                        Log.e(TAG, "Exception: %s", task.getException());
                        miniMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mDefaultLocation, DEFAULT_ZOOM));
                        miniMap.getUiSettings().setMyLocationButtonEnabled(false);
                    }
                }
            });
        }
    } catch(SecurityException e)  {
        Log.e("Exception: %s", e.getMessage());
    }
}

1 Ответ

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

Исправлено, понятия не имею, почему.

При кодировании через учебник я вынул

onMapReady(GoogleMap map) {

miniMap = map;

}

и заменил его на

onMapReady(GoogleMap miniMap) {}

Изменив его на onMapReady(GoogleMap map) {miniMap = map;} исправил это.Не уверен почему.

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