Ho un elenco di chat room per un determinato utente in una posizione e il numero totale di messaggi per una determinata chat room in un'altra posizione. Voglio tenere traccia di un certo numero di messaggi a cui l'utente di chat room appartiene.Come tenere traccia degli ascoltatori in Firebase su Android?
ho un seguente frammento:
//getting all chat rooms this user belongs to
mFirebase.child("myChatRooms").child("testUser").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded (DataSnapshot dataSnapshot, String previousKey){
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
ChatRoom myRoom = postSnapshot.getValue(ChatRoom.class);
//listening to message count in every chat room user belongs to
mFirebase.child("chatRoomMessageCount").child(postSnapshot.getKey()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//number of messages have changed
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
}
//......
}
La domanda è: come faccio a rimuovere tutte quelle di seguito ValueEventListener, quando sarà chiamato onChildRemoved, o io non più bisogno di loro?
Qual è l'approccio consigliato per gestire questa situazione? Devo memorizzare la chiave figlio e l'ascoltatore in HashMap e tenerne traccia personalmente o c'è un modo per rimuovere tutti gli ascoltatori per una data posizione di Firebase?
Questo è fondamentalmente quello che avevo in mente. Speravo davvero che ci sarebbe stato un modo più elegante per farlo, o funzionalità simili già integrate. Ad esempio, potremmo passare TAG come secondo parametro a addValueEventListener e quindi chiamare semplicemente qualcosa come removeValueEventListenersWithTag. Ma, immagino dato il tempo reale e la natura continua di Firebase, voi ragazzi avete deciso di lasciarlo agli sviluppatori, il che è ok, ma dovete rifletterlo nei documenti. I dati flat spesso portano a listener nidificati e potrebbe confondere chi è nuovo al concetto. – Sver
Sono d'accordo. Farò più ricerche su una soluzione più elegante. Apprezzo molto il tuo feedback! –
Questo soddisfa i requisiti di una risposta accettata per te? O ci sono altre considerazioni? –