Maison >Java >javaDidacticiel >Pourquoi est-ce que j'obtiens des valeurs nulles lors de l'affichage des données Firebase dans une ListView ?

Pourquoi est-ce que j'obtiens des valeurs nulles lors de l'affichage des données Firebase dans une ListView ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-03 00:51:38278parcourir

Why Am I Getting Null Values When Displaying Firebase Data in a ListView?

Affichage des données Firebase dans ListView : dépannage des valeurs nulles

Lors de la tentative d'affichage des données Firebase dans une ListView, des problèmes peuvent survenir lors de la tentative de récupération valeurs spécifiques. Si vous rencontrez des valeurs nulles lorsque vous tentez d'afficher à la fois l'ID utilisateur et le score, il est essentiel d'examiner attentivement votre code et de vous assurer qu'il respecte les meilleures pratiques.

Conventions de dénomination Java pour la classe de modèle

Un facteur crucial influençant la récupération appropriée des données est le respect des conventions de dénomination Java pour votre classe de modèle. Dans ce cas, la classe modèle « Score » doit être modifiée pour correspondre à ces conventions :

public class Score {
    private String userId, score;

    public Score() {}

    public Score(String userId, String score) {
        this.userId = userId;
        this.score = score;
    }

    public String getUserId() {
        return userId;
    }

    public String getScore() {
        return score;
    }

    @Override
    public String toString() {
        return "Score{" +
                "userId='" + userId + '\'' +
                ", score='" + score + '\'' +
                '}';
    }
}

Nature asynchrone de la récupération des données

La méthode onDataChange() utilisée pour la récupération de données dans Firebase a un caractère asynchrone. Cela signifie qu'il est invoqué avant même que vous tentiez d'ajouter les objets récupérés (de type Score) à la liste. Par conséquent, votre liste peut rester vide si vous y accédez en dehors de la méthode onDataChange().

Modification du code de récupération de données

En supposant que le nœud "score" est un enfant direct de votre racine Firebase, vous pouvez modifier votre code de récupération de données comme suit :

À l'aide de String Classe

ListView listView = (ListView) findViewById(R.id.list_view);
List<String> list = new ArrayList<>();
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);
            Log.d("TAG", userId + " / " + score);
        }
        arrayAdapter.notifyDataSetChanged();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d(TAG, task.getException().getMessage());
    }
};
scoreRef.addListenerForSingleValueEvent(eventListener);

Utilisation de la classe de score

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();
            Log.d("TAG", userId + " / " +  score);
            list.add(score);
        }
        arrayAdapter.notifyDataSetChanged();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d(TAG, task.getException().getMessage());
    }
};
scoreRef.addListenerForSingleValueEvent(eventListener);

En suivant ces ajustements, vous devriez pouvoir afficher avec succès les données Firebase dans votre ListView, en récupérant à la fois l'ID utilisateur et le score comme prévu.

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