Maison >Java >javaDidacticiel >Comment afficher efficacement les identifiants et les scores des utilisateurs Firebase dans une liste ?

Comment afficher efficacement les identifiants et les scores des utilisateurs Firebase dans une liste ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-01 12:10:12655parcourir

How to Efficiently Display Firebase User IDs and Scores in a ListView?

Affichage des données Firebase dans ListView avec la propriété Score

Lorsque vous tentez d'afficher à la fois l'ID utilisateur et le score des données Firebase dans une ListView, le la valeur du score peut être initialement indisponible. Voici un guide complet pour résoudre ce problème et présenter efficacement les deux propriétés.

Nature asynchrone de l'API Firebase

La méthode onDataChange() utilisée pour récupérer les données de Firebase est asynchrone , ce qui signifie qu'il peut être appelé avant que les objets Score ne soient ajoutés à la liste. Pour résoudre ce problème, déclarez la liste dans la méthode onDataChange() ou employez des techniques pour gérer efficacement le comportement asynchrone.

Structure et type des données

Assurez-vous que votre classe Score suit Conventions de dénomination Java pour les données membres. De plus, modifiez-le comme suit :

public class Score {
    private String userId;
    private String score;

    // ... [other class methods]
}

Récupération et affichage des données à l'aide d'une chaîne

Pour afficher des données à l'aide de la classe String, utilisez l'extrait de code ci-dessous :

ListView listView = (ListView) findViewById(R.id.list_view);
List<String> list = new ArrayList<>(); // Declare list within onDataChange() method
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, list);
listView.setAdapter(arrayAdapter);
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference scoreRef = rootRef.child("score");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String userId = ds.child("userId").getValue(String.class);
            String score = ds.child("score").getValue(String.class);
            list.add(userId + " / " + score);
        }
        arrayAdapter.notifyDataSetChanged();
    }

    // ... [onCancelled() method]
};
scoreRef.addListenerForSingleValueEvent(eventListener);

Récupération et affichage des données à l'aide de la classe de score

Pour récupérer et affichez les données à l'aide de la classe Score, utilisez l'extrait de code suivant :

ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Score score = ds.getValue(Score.class);
            String userId = score.getUserId();
            String score = score.getScore();
            list.add(userId + " / " + score);
        }
        arrayAdapter.notifyDataSetChanged();
    }

    // ... [onCancelled() method]
};
scoreRef.addListenerForSingleValueEvent(eventListener);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn