removeEventListener не работает на базе данных Firebase в двух проектах Firebase - PullRequest
0 голосов
/ 13 марта 2020

У меня есть два проекта firebase в моем приложении android, которые я установил в классе Application, все работает правильно. Я вызываю addValueEventListener при запуске фрагмента и также вызываю removeEventListener при уничтожении фрагмента, но мой слушатель не останавливает никаких изменений в БД, которые он сам вызовет. Тот же объект слушателя, который я удалил, и addValueEventListener не вызывать никуда.

Вот мой класс приложения

public class MyApplication extends Application {
private static MyApplication myApplication;
private SharedPreferenceManager sharedPreferenceManager;
private DatabaseReference reference;

public static MyApplication getMyApplication() {
    return myApplication;
}

@Override
public void onCreate() {
    super.onCreate();
    myApplication = this;

    FirebaseOptions options = new FirebaseOptions.Builder()
            .setApplicationId(getString(R.string.firebaseApplicationId))
            .setApiKey(getString(R.string.firebaseApiKey))
            .setDatabaseUrl(getString(R.string.firebaseDatabaseUrl))
            .setGcmSenderId(getString(R.string.firebaseGCMDefaultSenderId))
            .setProjectId(getString(R.string.firebaseProjectId))
            .setGaTrackingId(getString(R.string.firebaseCrashReporting))
            .setStorageBucket(getString(R.string.firebaseStorageBucket))
            .build();

    FirebaseApp currentApp = FirebaseApp.initializeApp(this, options, "secondary");
    FirebaseDatabase.getInstance(currentApp).setPersistenceEnabled(true);
    reference = FirebaseDatabase.getInstance(currentApp).getReference().child("schedules");
    reference.keepSynced(true);
}

public DatabaseReference getFirebaseReference() {
    return reference;
}
} 

Вот моя вызывающая функция

public void getData(){
    final Query query = MyApplication.getMyApplication().getFirebaseReference().child(userId).child(year).child(month);
    listener = query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            Log.d("TAG", "onDataChange: "+ listener);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

@Override
public void onDestroy() {
    view = null;
    if (listener != null) {
        Log.d("TAG", "onDestroy: "+ listener);
MyApplication.getMyApplication().getFirebaseReference().removeEventListener(listener);
    }
}

removeEventListener имеет тот же объект слушателя, который я назначаю из addValueEventListener объекта слушателя. Вот мой код, пожалуйста, помогите мне

TAG: onDataChange: Presenter$2@e4afd4f
TAG: onDestroy: Presenter$2@e4afd4f
TAG: onDataChange: Presenter$2@e4afd4f

1 Ответ

0 голосов
/ 14 марта 2020
DatabaseReference databaseReference = MyApplication.getMyApplication().getFirebaseReference().child(userId).child(year).child(month);
listener = databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });




@Override
public void onDestroy() {
    if (listener != null && databaseReference != null) {
        databaseReference.removeEventListener(listener);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...