es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo obtener un niño aleatorio de la base de datos de Firebase?

Intento obtener un niño aleatorio de mi Firebase, pero no puedo. He probado muchas ideas de Stack Overflow, pero aún no funciona. Por ejemplo, quiero obtener un niño aleatorio de “Bahan Makanan Susu” y luego mostrar el valor de “kalori”.

Esta es mi base de datos creada.

enter image description here

Este es mi código actualmente.

reff = FirebaseDatabase.getInstance().getReference();
reff.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull  DataSnapshot dataSnapshot) {
        String Sskal = dataSnapshot.child("Bahan Makanan Susu").child("3").child("Kalori").getValue().toString();

En la parte 'child("3")' he creado esto manualmente y quiero que sea aleatorio. Gracias, espero que todos puedan ayudarme.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener un niño al azar de “Bahan Makanan Susu”, puedes seguir estos pasos:

    1. Obtén el número total de hijos bajo “Bahan Makanan Susu”:
      int count = (int) dataSnapshot.child("Bahan Makanan Susu").getChildrenCount();
      
    2. Genera un número aleatorio entre 0 y count-1:
      int randomIndex = new Random().nextInt(count);
      
    3. Itera a través de los hijos de “Bahan Makanan Susu” hasta que llegues al índice aleatorio:
      DataSnapshot randomChild = null;
      int currentIndex = 0;
      for (DataSnapshot child : dataSnapshot.child("Bahan Makanan Susu").getChildren()) {
         if (currentIndex == randomIndex) {
             randomChild = child;
             break;
         }
         currentIndex++;
      }
      
    4. Obtén el valor de “kalori” del niño aleatorio:
      String kalori = randomChild.child("Kalori").getValue().toString();
      

    Entonces, el código final se verá así:

    reff = FirebaseDatabase.getInstance().getReference();
    reff.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull  DataSnapshot dataSnapshot) {
            int count = (int) dataSnapshot.child("Bahan Makanan Susu").getChildrenCount();
            int randomIndex = new Random().nextInt(count);
            DataSnapshot randomChild = null;
            int currentIndex = 0;
            for (DataSnapshot child : dataSnapshot.child("Bahan Makanan Susu").getChildren()) {
                if (currentIndex == randomIndex) {
                    randomChild = child;
                    break;
                }
                currentIndex++;
            }
            String kalori = randomChild.child("Kalori").getValue().toString();
            Log.d("Random Kalori", kalori);
        }
    
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.d("Firebase error", databaseError.getMessage());
        }
    });
    

Comments are closed.