Heim >Java >javaLernprogramm >Warum erhalte ich Nullwerte, wenn ich Firebase-Daten in einer ListView anzeige?
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!