Hente alle dataene under node i utskytningssanntidsdatabase

stemmer
0

Jeg har en Firesanntidsdatabase og ønsker å bruke dataene til å lage et leaderboard. Im prøver å hente alle dataene i min Scores node, men er ikke sikker på hvordan du sløyfe gjennom for å få resultatet av alle brukere.

Databasestrukturen er som følger: skriv

Koden jeg har prøvd å bruke er dette:

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

    }


});

        }
}
Publisert på 13/02/2020 klokken 23:59
kilden bruker
På andre språk...                            


2 svar

stemmer
0

Det ser ut som om du bruker en "Listener" klasse for å få tilgang til data og skrive ut resultatet. Den "ValueEventListener" lytter du vedlagt, med "onDataChange ()" metoden implementert, ville ikke bli kalt før det er en data endring.

Jeg er ikke sikker på hvordan du bruker denne klassen, men basert på spørsmålet ditt, jeg antar at du bare ønsker å skrive ut resultatet når "leaderboard.onCreate ()" metoden utføres. Er dette riktig? Hvis det er tilfelle, trenger du kanskje ikke å være å feste en lytter.

Svarte 14/02/2020 kl. 01:31
kilden bruker

stemmer
1

Du kommer til et nivå for dypt inn i JSON og leser /Points/Points. Siden den noden ikke finnes, får du en tom øyeblikksbilde i 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());
    }
});
Svarte 14/02/2020 kl. 03:09
kilden bruker

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