Recuperar todos los datos bajo nodo de la base de datos en tiempo real firebase

votos
0

Tengo una base de datos en tiempo real base de fuego y desea utilizar los datos para hacer una tabla de clasificación. Im tratando de recuperar todos los datos en mi nodo de puntuaciones, pero no estoy seguro de cómo recorrer para obtener las puntuaciones de todos los usuarios.

La estructura de base de datos es la siguiente: introducir

El código que he tratado de utilizar es la siguiente:

package com.example.securityapp;

import androidx.appcompat.app.AppCompatActivity;

import android.nfc.Tag;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;

import static java.lang.System.in;

public class leaderboard extends AppCompatActivity {

    DatabaseReference databaseUsers;
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    FirebaseAuth mAuth;
    TextView score;
    private static final String TAG = leaderboard;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_leaderboard);

        databaseUsers = database.getReference().child(Scores);
        mAuth = FirebaseAuth.getInstance();
        FirebaseUser user = mAuth.getCurrentUser();
        score = (TextView) findViewById(R.id.leaderboard_score);


        databaseUsers.child(Scores).addValueEventListener(new ValueEventListener() {
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        System.out.println(The scores are  + dataSnapshot.child(Points).getValue().toString());
                    }
                }


            @Override
            public void onCancelled(DatabaseError databaseError) {
             // Getting Post failed, log a message
             Log.w(TAG, loadPost:onCancelled, databaseError.toException());

    }


});

        }
}
Publicado el 13/02/2020 a las 23:59
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
0

Parece como si está utilizando una clase de "escucha" para acceder a los datos e imprimir los resultados. El oyente "ValueEventListener" se adjunta, con el método "onDataChange ()" implementado, no sería llamada hasta que haya un cambio de datos.

No estoy seguro de cómo está utilizando esta clase, pero en base a su pregunta, estoy asumiendo que lo que desea imprimir los resultados cuando se ejecuta el método "leaderboard.onCreate ()". ¿Es esto correcto? Si ese es el caso, puede que no necesite ser adjuntar un oyente.

Respondida el 14/02/2020 a las 01:31
fuente por usuario

votos
1

Vas nivel uno demasiado profundo en su JSON y leyendo /Points/Points. Dado que no existe ese nodo, se obtiene una instantánea vacío en su onDataChange.

database.getReference().child("Scores").addValueEventListener(new ValueEventListener() {
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
            Log.i(TAG, "The scores are " + dataSnapshot.child("Points").getValue(Long.class));
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
    }
});
Respondida el 14/02/2020 a las 03:09
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more