Есть ли способ автоматического удаления данных из Firebase после уничтожения приложения?

# #android #firebase #firebase-realtime-database

Вопрос:

Я пишу приложение в Android Studio, которое соответствует пользователям по местоположению. Чтобы избежать большого использования сети, я загружаю радиус, в котором «поставщик» предоставляет услуги. Когда «пользователь» ищет доступные услуги в своем регионе, приложение ищет только в каталоге для своего региона. Таким образом, ему не нужно опрашивать тысячи, а если и миллионы, других пользователей, чтобы найти наиболее близкого. Все это делается в базе данных Firebase в режиме реального времени.

Проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы «поставщик» отображался только тогда, когда они вошли в приложение. Это включает в себя, когда приложение находится в фоновом режиме. Я пробовал использовать onDestroy, но он не может полностью завершить удаление до того, как будет вызван супер, и он остановит удаление. Есть ли лучший способ добиться этого? Вот что я использую прямо сейчас:

Этот код предназначен для выхода пользователя, который отлично работает при нажатии кнопки «Выход».:

  mAuth.signInWithEmailAndPassword(loginEmail.getText().toString().trim(),
        loginPassword.getText().toString().trim()).addOnCompleteListener(task -> {

    if (task.isSuccessful()) {
        MainActivity.util.changeUIState(true, getActivity());
        MainActivity.util.popupNotice(mainView.getContext(), R.string.login_successful);
        FirebaseAppUtilsHSquared fbUtil = new FirebaseAppUtilsHSquared();
        fbUtil.getUserProfileInfo(getActivity());
        MainActivity.loggedIn = true;
        mAuth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                if (firebaseAuth.getCurrentUser() == null){
                    if (!MainActivity.firstGPSRequest) {
                        for (int x = 0; x < MainActivity.matrix[0].length; x  ) {
                            for (int y = 0; y < MainActivity.matrix.length; y  ) {
                                FirebaseDatabase.getInstance().getReference(MainActivity.GPS_PATH)
                                        .child(String.valueOf(MainActivity.matrix[y][x])).removeValue();
                            }
                        }
                    }
                }
            }
        });
 

Вот onDestroy() переопределение. Я также попытался поместить приведенный выше код в поле «Уничтожить»:

   @Override
    protected void onDestroy() {

        mAuth.signOut();
        fusedLocationClient.removeLocationUpdates(locationCallback);
        super.onDestroy();
    }

 

Комментарии:

1. Пожалуйста, не используйте в своем вопросе заглавные буквы, так как это обычно воспринимается как крик на людей. Вместо этого используйте инструменты форматирования переполнения стека, чтобы расставлять акценты там, где это необходимо.

2. ОК. Я не подумал об этом, так что мне очень жаль. Не могли бы вы помочь мне с этим вопросом, пожалуйста?

3. Итак, вы хотите удалить все пользовательские данные, когда приложение будет уничтожено?

4. Не пользовательские данные, а только элементы в базе данных реального времени, которые используются только для этого сеанса.

Ответ №1:

Вы пробовали вызывать super.onDestroy() после задержки потока ?

Подобный этому

   @Override
    protected void onDestroy() {

        mAuth.signOut();
        fusedLocationClient.removeLocationUpdates(locationCallback);
        final Handler handler = new Handler(Looper.getMainLooper());
        handler.postDelayed(new Runnable() {
          @Override
          public void run() {
            super.onDestroy();
          }
        }, 1000);
    }
 

Комментарии:

1. Я устал от этого, и, поскольку «new Runnable()» является внутренним классом, он не распознает «super.onDestroy();»

2. это прискорбно