Heim > Java > javaLernprogramm > Wie zeige ich Firebase-Daten effizient in einer Android-ListView an?

Wie zeige ich Firebase-Daten effizient in einer Android-ListView an?

Mary-Kate Olsen
Freigeben: 2024-12-09 21:26:15
Original
215 Leute haben es durchsucht

How to Efficiently Display Firebase Data in an Android ListView?

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 + '\'' +
                '}';
    }
}
Nach dem Login kopieren

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);
            }
Nach dem Login kopieren

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage