Я новичок в 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)