Récupérer toutes les données sous le nœud dans la base de données en temps réel firebase

voix
0

J'ai une base de données en temps réel de firebase et que vous souhaitez utiliser les données pour faire un leaderboard. Im tente de récupérer toutes les données dans mon noeud scores, mais ne suis pas sûr de savoir comment faire une boucle à travers pour obtenir les scores de tous les utilisateurs.

La structure de base de données est comme ci-dessous: entrez

Le code que j'ai essayé d'utiliser est la suivante:

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());

    }


});

        }
}
Créé 13/02/2020 à 23:59
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
0

Il semble que vous utilisez une classe « Listener » pour accéder aux données et imprimer les scores. L'auditeur « ValueEventListener » vous attaché, avec la méthode « OnDataChange () » mis en œuvre, ne serait pas appelé jusqu'à ce qu'il ya un changement de données.

Je ne sais pas comment vous utilisez cette classe, mais en fonction de votre question, je suppose que vous voulez juste imprimer les partitions lorsque la méthode « leaderboard.onCreate () » est exécutée. Est-ce correct? Si tel est le cas, vous ne pouvez pas besoin d'être attacher un auditeur.

Créé 14/02/2020 à 01:31
source utilisateur

voix
1

Vous allez un niveau trop profond dans votre JSON , et leur lecture /Points/Points. Étant donné que ce nœud n'existe pas, vous obtenez un aperçu vide dans votre 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());
    }
});
Créé 14/02/2020 à 03:09
source utilisateur

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