Ich benutze Firebase für Android und konfrontiert mit etwas Fehlverhalten von limitToLast() Abfrage. Was ich zu tun bin versucht, ist das letzte Kind der Liste zu bekommen, und durch andere Kinder dieses Knotens iterieren:Android Firebase seltsam limitToLast (1) Verhalten
database.getReference().child("draws").limitToLast(1).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot snap: dataSnapshot.getChildren()){
//Some work
snap.getValue()
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
//Some error handling
}
});
Nehmen wir an, ich bin mit limitToLast (1), um das Kind zu bekommen draws/2 (siehe den Datenbank-Snap unten), der der letzte in einer Draw-Liste ist. Und danach verwende ich dataSnapshot.getChildren(), um die Liste der untergeordneten Elemente draws/2 zu erhalten. Was ich nach dem Durchlaufen der dataSnapshot.getChildren() Liste erhalten sollte: "85", "86", "60", "7" als separate Werte mit snap.getValue(). ToString() in der Schleife.
Was ich tatsächlich bekommen, ist der Wert des letzten Kindes ohne seine Kinder erreichbar. Ergebnis: "[85, 86, 60, 7]". Es sieht so aus, als ob dataSnapshot.getChildren() keine untergeordneten Elemente des Knotens draws/2 erhält, sondern nur einen ganzen Wert des Knotens erhält.
Als Test habe ich versucht, limitToLast (1) Abfrage loszuwerden und mit Kind ("2") ersetzen und alles hat gut funktioniert.
Es ist möglich, dass ich die Funktionalität von limitToLast() missverstanden habe, aber wenn es wahr ist, wie kann ich auf Kinder des letzten Knotens zugreifen?
Danke, Frank! Genau das habe ich gesucht. Ich bin sehr froh, dass Sie das Firebase-Thema auf StackOverflow aktiv moderieren. Ihre Antworten sind sehr hilfreich – NickitaX
Gern geschehen. Mach weiter Hacking! –