Captura de pantalla de la lista de mi hijo

My Child List Screenshot

Necesito obtener el número de niños (¡No hay niños anidados allí!) Y almacenarlo en una variable pública global. Además, quiero que todos los niños coloquen una lista de matriz de cadenas.

¡Gracias de antemano!

-2
Hafeez ul haq 16 oct. 2018 a las 15:26

2 respuestas

La mejor respuesta

Utilice alguna forma de oyente. Para una búsqueda única, use valueEventListener.

Luego, en el método OnDataChange () que se genera automáticamente. Utilice la instantánea de datos para obtener el childrenCount y luego examinar los niños y agregarlos a la lista.

List<String> list = new ArrayList<>();
long childrenCount;
public void getListItems()
{
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
    ref.addValueEventListener(new ValueEventListener()
    {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot)
        {
            childrenCount = dataSnapshot.child("searchingUsers").getChildrenCount();
            for (DataSnapshot snap : dataSnapshot.child("searchingUsers").getChildren())
            {
                //If you want the node value
                list.add(snap.getValue().toString());

                //If you want the key value
                list.add(snap.getKey());
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            throw databaseError.toException(); // don't ignore errors
        }
    });
}

Esto hace que ambas variables sean globales en la Actividad. Para que pueda comunicarse con ellos desde cualquier lugar de la actividad

1
Frank van Puffelen 16 oct. 2018 a las 13:24

Para obtener una lista de todos esos valores aleatorios, utilice las siguientes líneas de código:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference searchingUsersRef = rootRef.child("searchingUsers");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String value = ds.getValue(String.class);
            list.add(value);
        }

        //Do what you need to do with your list
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage());
    }
};
searchingUsersRef.addListenerForSingleValueEvent(valueEventListener);

Como puede ver, he usado la lista solo dentro de la devolución de llamada, si desea usar la lista en el exterior, le recomiendo que vea la última parte de mi respuesta de este post en el que he explicado cómo se puede hacer usando una devolución de llamada personalizada. También puede ver este vídeo para mejor entendimiento.

0
Alex Mamo 17 oct. 2018 a las 05:07