Получить все данные под узлом в базе данных в режиме реального времени firebase

голоса
0

У меня есть база данных в режиме реального времени firebase и хочу использовать данные, чтобы сделать лидер. Im пытается получить все данные в моем узле Множества, но я не уверен, как перебрать, чтобы получить результаты всех пользователей.

Структура базы данных, как показано ниже: введите

Код, который я пытался использовать это:

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

    }


});

        }
}
Задан 13/02/2020 в 23:59
источник пользователем
На других языках...                            


2 ответов

голоса
0

Похоже, что вы используете класс «Listener» для доступа к данным и распечатать результаты. Слушатель «ValueEventListener» вы прикреплены, с «OnDataChange ()» метод реализован, не будет называться, пока не произойдет изменение данных.

Я не знаю, как вы используете этот класс, но, основываясь на ваш вопрос, я предполагаю, что вы просто хотите, чтобы напечатать результаты, когда метод «leaderboard.onCreate ()» выполняется. Это верно? Если это так, то вам, возможно, не нужно быть прикрепление слушателя.

Ответил 14/02/2020 в 01:31
источник пользователем

голоса
1

Ты первый уровень слишком глубоко в JSON и чтение /Points/Points. Поскольку этот узел не существует, то вы получите пустой снимок в вашей 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());
    }
});
Ответил 14/02/2020 в 03:09
источник пользователем

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