Как отсоединить слушателя пожарного депо

Я новичок в FireStore. Я создал ListenerRegistration, чтобы обновить мой Recycler View. Я знаю, что моя реализация может быть не идеальной, но каждый раз, когда моя деятельность разрушается, мое приложение выдает ошибку в строках, которые находятся внутри этого слушателя. Я не знаю почему, но mt registration.remove () не работает до уничтожения или после выполнения finish (). Может кто-нибудь помочь?

public class MainActivity extends AppCompatActivity {

  private ListenerRegistration registration;
  private com.google.firebase.firestore.Query query;

  private void requestPacienteList(){

    FirebaseFirestore db = FirebaseFirestore.getInstance();
    progress.setVisibility(View.VISIBLE);
    query = db.collection("Hospital");
    registration = query.addSnapshotListener(new EventListener<QuerySnapshot>() {

        @Override
        public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {
            for(DocumentSnapshot documentSnapshot : documentSnapshots){

                if(documentSnapshot.get("nome").equals("Santa Clara")){

                    hospital = documentSnapshot.toObject(Hospital.class);
                    hospital.setHospitalDocumentKey(documentSnapshot.getId());
                    FirebaseFirestore db = FirebaseFirestore.getInstance();

                    db.collection("Hospital")
                            .document(hospital.getHospitalDocumentKey())
                            .collection("Pacientes")
                            .addSnapshotListener(new EventListener<QuerySnapshot>() {

                                 @Override
                                public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {

                                    homeModelList.clear();
                                    for(DocumentSnapshot documentSnapshot : documentSnapshots){

                                        final Paciente paciente = documentSnapshot.toObject(Paciente.class);
                                        paciente.setPacienteKey(documentSnapshot.getId());
                                        FirebaseFirestore db = FirebaseFirestore.getInstance();
                                        db.collection("Pessoa")
                                                .document(paciente.getProfissionalResponsavel())
                                                .addSnapshotListener(new EventListener<DocumentSnapshot>() {

                                                    @Override
                                                    public void onEvent(DocumentSnapshot documentSnapshot, FirebaseFirestoreException e) {

                                                        Profissional profissional = documentSnapshot.toObject(Profissional.class);
                                                        int[] covers = new int[]{R.drawable.ic_person_black};
                                                        HomeModel p = new HomeModel(paciente.getNome()+" "+paciente.getSobrenome(),paciente.getBox(),paciente.getLeito(),
                                                        covers[0],profissional.getNome()+ " "+profissional.getSobrenome(),paciente.getPacienteKey());
                                                        homeModelList.add(p);
                                                        homeAdapter.notifyDataSetChanged();
                                                        prepareListaPacientes();
                                                    }
                                        });
                                    }
                                }
                            });
                    }
            }
        }
    });

    switch (id){

        case R.id.logout:

            if(FirebaseAuth.getInstance().getCurrentUser()!=null)
                FirebaseAuth.getInstance().signOut();

            Intent it = new Intent(HomeActivity.this, MainActivity.class);
            startActivity(it);

            if(registration!=null)
                registration.remove();

            finish();

            drawerLayout.closeDrawers();
            break;
    }
  }

}

Мой метод onDestroy:

@Override
protected void onDestroy() {
    super.onDestroy();
    registration.remove();
}

Когда я удаляю это, если:

if(FirebaseAuth.getInstance().getCurrentUser()!=null)
    FirebaseAuth.getInstance().signOut();

Мой проблема ушла Но если нет, я получаю следующую ошибку:

java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.Object com.google.firebase.firestore.DocumentSnapshot.toObject (java.lang.Class) 'для ссылки на пустой объект в santauti.app.Activities.Home.HomeActivity $ 4 $ 1 $ 1.onEvent (HomeActivity.java:200) в santauti.app.Activities.Home.HomeActivity $ 4 $ 1 $ 1.onEvent (HomeActivity.java:197) на com.google.firebase.firestore.DocumentReference.zza (неизвестный источник) на com.google.firebase.firestore.zzd.onEvent (неизвестный источник) на com.google.android.gms.internal. zzejz.zza (неизвестный источник) на com.google.android.gms.internal.zzeka.run (неизвестный источник) на android.os.Handler.handleCallback (Handler.java:751) на android.os.Handler.dispatchMessage (обработчик) .java: 95) в android.os.Looper.loop (Looper.java:154) в android.app.ActivityThread.main (ActivityThread.java:6119) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.j ava: 886) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776)

8
задан Rohit Singh 10 September 2019 в 01:14
поделиться