Maison >Java >javaDidacticiel >Pourquoi est-ce que j'obtiens des valeurs nulles lors de l'affichage des données Firebase dans une 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!