¿Cómo hacer un seguimiento de los oyentes en Firebase en Android?

Tengo una lista de salas de chat para un usuario determinado en una ubicación y el número total de mensajes para una sala de chat dada en otra ubicación. Quiero hacer un seguimiento de una serie de mensajes en las salas de chat usuario pertenece a.

Tengo un siguiente fragmento:

//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 pregunta es, ¿cómo puedo eliminar todos los ValueEventListener más tarde, cuando onChildRemoved se llamará, o no los necesito más?

¿Cuál es el enfoque recomendado para hacer frente a esta situación? ¿Debo almacenar la clave de niño y el oyente en HashMap y mantener un registro de ellos yo mismo o hay alguna manera de eliminar a todos los oyentes de una ubicación de firebase dada?

Una forma concienzuda de datos sería crear un HashMap de ValueEventListeners y luego en onStop o onDestroy quitarías esos oyentes.

Para mantener las cosas simples, usted debe utilizar un único oyente de eventos para obtener las habitaciones. A continuación, para cada habitación se puede crear un oyente en tiempo real.

 public class MainActivity extends Activity { private Firebase mRef; private HashMap<Firebase, ValueEventListener> mListenerMap; @Override protected void onStart() { super.onStart(); mRef = new Firebase("https://<your-firebase-app>/myChatRooms/testUser"); mRef.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { ValueEventListener listener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // do your thing here } @Override public void onCancelled(FirebaseError firebaseError) { } }; mListenerMap.put(postSnapshot.getRef(), listener); Firebase childRef = mRef.child("chatRoomMessageCount").child(postSnapshot.getKey()); childRef.addValueEventListener(listener); } } @Override public void onCancelled(FirebaseError firebaseError) { } }); } @Override protected void onStop() { super.onStop(); for (Map.Entry<Firebase, ValueEventListener> entry : mListenerMap.entrySet()) { Firebase ref = entry.getKey(); ValueEventListener listener = entry.getValue(); ref.removeEventListener(listener); } } } 
  • ¿Cómo Lombok genera código en la clase existente?
  • ¿Por qué SQLException no captura SQLiteExcpetion?
  • Cómo cambiar todas las transiciones de actividad de una vez en la aplicación de Android?
  • Android java apoyo lambda expresión en java 8?
  • Uso de fuentes personalizadas para todo el texto de la aplicación que no funciona con Lollipop
  • ¿Cómo "lanzar nuevo ZygoteInit.MethodAndArgsCaller" limpiar los marcos de pila?
  • Usar JavaCV y Realm juntos causa "java.lang.UnsatisfiedLinkError"
  • Cómo utilizar Google Api de traducción en mi aplicación de Android
  • ¿Proguard mantiene nombres de clase?
  • Cómo ajustar el tamaño de los desplegables de azulejos
  • Cómo calcular el ancho de la fuente de cadena en píxeles?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.