Heim >Java >javaLernprogramm >Warum erhalte ich Nullwerte, wenn ich Firebase-Daten in einer ListView anzeige?

Warum erhalte ich Nullwerte, wenn ich Firebase-Daten in einer ListView anzeige?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-03 00:51:38278Durchsuche

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

Anzeigen von Firebase-Daten in ListView: Fehlerbehebung bei Nullwerten

Beim Versuch, Firebase-Daten in einer ListView anzuzeigen, können beim Abrufen Probleme auftreten spezifische Werte. Wenn Sie beim Versuch, sowohl die Benutzer-ID als auch den Score anzuzeigen, auf Nullwerte stoßen, müssen Sie Ihren Code sorgfältig überprüfen und sicherstellen, dass er den Best Practices entspricht.

Java-Namenskonventionen für Modellklassen

Ein entscheidender Faktor, der den ordnungsgemäßen Abruf von Daten beeinflusst, ist die Einhaltung der Java-Namenskonventionen für Ihre Modellklasse. In diesem Fall sollte die Modellklasse „Score“ geändert werden, um diesen Konventionen zu entsprechen:

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 + '\'' +
                '}';
    }
}

Asynchrone Natur des Datenabrufs

Die verwendete onDataChange()-Methode Der Datenabruf in Firebase ist asynchroner Natur. Dies bedeutet, dass es bereits aufgerufen wird, bevor Sie versuchen, die abgerufenen Objekte (vom Typ Score) zur Liste hinzuzufügen. Daher bleibt Ihre Liste möglicherweise leer, wenn Sie außerhalb der onDataChange()-Methode darauf zugreifen.

Ändern des Datenabrufcodes

Angenommen, der Knoten „score“ ist ein Wenn Sie ein direktes untergeordnetes Element Ihres Firebase-Stamms sind, können Sie Ihren Datenabrufcode wie folgt ändern:

Mit String Klasse

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);

Verwendung der Score-Klasse

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);

Durch Befolgen dieser Anpassungen sollten Sie in der Lage sein, Firebase-Daten erfolgreich in Ihrer ListView anzuzeigen und abzurufen sowohl die Benutzer-ID als auch die Punktzahl wie vorgesehen.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich Nullwerte, wenn ich Firebase-Daten in einer ListView anzeige?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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