Recuperare tutti i dati sotto il nodo nel database tempo reale Firebase

voti
0

Ho un database Firebase in tempo reale e si desidera utilizzare i dati per fare una classifica. Im cercando di recuperare tutti i dati nel mio nodo punteggi, ma non sono sicuro di come scorrere per ottenere i punteggi di tutti gli utenti.

La struttura del database è la seguente: entrare

Il codice che ho cercato di utilizzo è questo:

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

    }


});

        }
}
È pubblicato 13/02/2020 alle 21:59
fonte dall'utente
In altre lingue...                            


2 risposte

voti
0

Sembra come se si utilizza una classe "Listener" per accedere ai dati e stampare i punteggi. L'ascoltatore "ValueEventListener" si attaccato, con il metodo "OnDataChange ()" implementato, non sarebbe stato chiamato fino a quando c'è una modifica dei dati.

Io non sono sicuro di come si utilizza questa classe, ma in base alla tua domanda, io parto dal presupposto che si desidera solo per stampare i punteggi quando viene eseguito il metodo del "leaderboard.onCreate ()". È corretto? Se questo è il caso, potrebbe non essere necessario per essere il collegamento di un ascoltatore.

Risposto il 13/02/2020 a 23:31
fonte dall'utente

voti
1

Si sta andando livello uno troppo in profondità nel vostro JSON e stanno leggendo /Points/Points. Dal momento che il nodo non esiste, si ottiene un'istantanea vuoto nel vostro 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());
    }
});
Risposto il 14/02/2020 a 01:09
fonte dall'utente

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