Как остановить обновление местоположения в Android при выходе - PullRequest
0 голосов
/ 13 июня 2018

Я использую постоянное обновление местоположения аутентифицированного пользователя в моем приложении.Когда я выхожу из приложения, происходит сбой.Я понял, что приложение зависает из-за обновления местоположения, поэтому я решил удалить обновление местоположения, используя locmngr.removeUpdates(this), если нет аутентифицированного пользователя.Когда пользователь нажимает на logout mAath.getUid(), он становится нулевым, и я получаю ошибку: Attempt to invoke virtual method 'boolean java.lang.String.isEmpty()' on a null object reference.

try {
    locmngr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 7, 30, new LocationListener() {
        @Override
        public void onLocationChanged(final Location location) {

            // Add a marker at your current location and move the camera
            Log.e("location", location.toString());
            Log.e("location", "updating");
            // Toast.makeText(ProfileNavigation.this, "Location : "+location.getLatitude()+" , "+location.getLongitude(), Toast.LENGTH_SHORT).show();
            //double a = location.getLongitude();
            //double  b = location.getLatitude();
            if(!mAuth.getUid().isEmpty()) {

                db.collection("UserProfile").document(mAuth.getUid()).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                        if (task.isSuccessful()) {
                            DocumentSnapshot documentSnapshot = task.getResult();
                            if (documentSnapshot.exists()) {

                                Log.e("maps", "updating");
                                Map<String, Object> data = new HashMap<>();
                                data.put("Latitude", location.getLatitude());
                                data.put("Longitude", location.getLongitude());

                                db.collection("UserProfile").document(mAuth.getUid())
                                        .set(data, SetOptions.merge())
                                        .addOnSuccessListener(new OnSuccessListener<Void>() {
                                            @Override
                                            public void onSuccess(Void aVoid) {
                                                Log.e("maps", "DocumentSnapshot successfully written!");
                                            }
                                        })
                                        .addOnFailureListener(new OnFailureListener() {
                                            @Override
                                            public void onFailure(@NonNull Exception e) {
                                                Log.e("maps", "Error writing document", e);
                                            }
                                        });
                            } else {

                                Log.e("firestore", "Error getting documents.", task.getException());
                            }
                        } else {

                            Log.e("firestore", "Error getting documents.", task.getException());
                        }
                    }
                });

            }
            else {
                locmngr.removeUpdates(this);
            }
        }
    }
}

1 Ответ

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

Вызовите removeUpdates метод внутри onPause() метода.

@Override
protected void onPause() {
    super.onPause();
    locmngr.removeUpdates(this);
    Log.i(TAG, "onPause, done");
}

также вы получаете:

Попытка вызвать виртуальный метод 'boolean java.lang.String.isEmpty ()

if(logout mAath.getUid()!=null){
//do operation here
}

Надеюсь, это поможет вам !!

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