Firebase-Daten in ListView anzeigen
Eine häufige Herausforderung für Entwickler besteht darin, Daten aus Firebase in einer ListView anzuzeigen. Kürzlich hat ein Benutzer eine Frage zu diesem Thema gestellt und dabei auf aufgetretene Probleme hingewiesen. Lassen Sie uns auf ihre Bedenken eingehen und Lösungen anbieten.
Das Problem
In ihrem Code wurde zunächst die Benutzer-ID angezeigt, die Punktzahl konnte jedoch nicht angezeigt werden. Nachdem einige Änderungen vorgenommen wurden, blieben sie mit Nullwerten zurück. Sie vermuteten ein Lösch- oder Rechtschreibproblem und suchten Hilfe.
Lösung des Problems
Bei der Überprüfung des bereitgestellten Codes ergab sich, dass das Problem darauf zurückzuführen war, dass die Java-Namenskonventionen im Modell nicht eingehalten wurden Klasse. Die Klasse sollte „Score“ heißen und wie folgt formatiert sein:
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 + '\'' + '}'; } }
Darüber hinaus führte die asynchrone Natur der onDataChange()-Methode dazu, dass die Liste leer blieb. Um dies zu beheben, sollte die Listendeklaration innerhalb von onDataChange() verschoben werden.
Asynchrones Verhalten und Datenabruf
Es ist wichtig, das asynchrone Verhalten von onDataChange() zu verstehen. Verfahren. In diesem Fall wird es aufgerufen, noch bevor versucht wird, Objekte zur Liste hinzuzufügen. Folglich führt jeder Versuch, die Liste außerhalb dieser Methode zu verwenden, zu leeren Ergebnissen.
Um dieses Verhalten zu beheben, kann die Listendeklaration innerhalb von onDataChange() verschoben werden, wie im folgenden Code dargestellt:
dbref.addValueEventListener(new com.google.firebase.database.ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { ArrayList<String> list = new ArrayList<>(); for(DataSnapshot ds :dataSnapshot.getChildren()) { Score Result = ds.getValue(Score.class); String userId = String.valueOf(Result.getUserId()); String score = String.valueOf(Result.getScore()); list.add(userId); list.add(score); } adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, list); LvRanking.setAdapter(adapter); }
Anzeigen von Daten mithilfe der String-Klasse
Um die Daten mithilfe der String-Klasse anzuzeigen, können Sie Folgendes verwenden Code:
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);
Anzeigen von Daten mithilfe der Score-Klasse
Alternativ können Sie zum Anzeigen von Daten mithilfe der Score-Klasse den folgenden Code verwenden:
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);
Wenn Sie diese Lösungen befolgen, sollten Sie Firebase-Daten erfolgreich in einer ListView anzeigen können.
Das obige ist der detaillierte Inhalt vonWie zeige ich Firebase-Daten effizient in einer Android-ListView an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!