FB android zählen Kinder und speichern Sie in einer Variablen
In meiner Anwendung, die ich bin in der Lage zu bekommen Kinder, die zählen, indem Sie die datasnapshot.getchildren().
Aber was soll ich tun, wenn ich speichern möchten Sie, dass count in eine variable?
mRefReg.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i(dataSnapshot.getKey(),dataSnapshot.getChildrenCount()+"Count");
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
einschließlich "mCount = dataSnapshot.getChildren" scheint nicht zu funktionieren.
- warum ist "mCount =..." nicht funktioniert ? Wenn mCount ist die variable definiert, die außerhalb Ihres anonymen Klasse sollte es funktionieren. Was ist die Fehlermeldung von Ihrer Identität ?
- FB hat vor kurzem die release-Cloud-Funktionen. Haben Sie einen Blick auf dieses Antwort für mehr details
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie sehen, ist wahrscheinlich die Tatsache, dass die Daten aus der FB geladen wird asynchron. Das erste mal, wenn Sie auf dieses, es ist ein großer Paradigmenwechsel. Aber da die meisten modernen cloud-APIs, die auf diese Weise funktionieren, ist es am besten, Sie zu umarmen, es so schnell wie möglich.
Der einfachste Weg, die ich gefunden habe, um zu sehen, was passiert, wenn wir einige logging-Anweisungen:
Im Gegensatz zu dem, was Ihre intuition Ihnen sagt, der Ausgang von diesem sein wird:
Der Grund dafür ist (wie ich am Anfang schon gesagt), dass FB asynchron ruft die Daten aus der Datenbank. Ein Spaß Weg, um zu realisieren, warum das so ist, ist eine änderung vornehmen, um Ihre Daten (zum Beispiel in der FB-Datenbank-Konsole). Wenn Sie diese änderung vornehmen, die
onDataChange
wird erneut aufgerufen und drucken Sie eine weitere:Leider bedeutet dies, dass Sie nicht tun können, die folgenden behandeln die Kinder zählen:
Weil der Ausgang wird sein:
Der beste trick, den ich gefunden habe, die sich mit diesem asynchrone laden ist reframe das problem. Anstatt zu sagen "wir Holen den Grafen, dann machen wir xyz mit ihm", versuchen framing es als "immer, wenn wir bekommen die Anzahl, tun xyz mit ihm". Dies bedeutet, dass Sie brauchen, um den code erfordert, dass der Graf in
onDataChange()
:Wenn Sie es umsetzen wie diese, die Zählung in der Benutzeroberfläche wird aktualisiert, wenn die Anzahl der Elemente in der Datenbank ändert.
Gibt es einige info fehlt in deiner Frage, aber ich glaube, ich weiß, was Los ist.
Die Zuhörer in der Feuerstellung sind asynchron, so können Sie nicht eine variable einfach.
Optionen zu gehen:
1) Deklarieren Sie eine variable innerhalb der Methode onDataChange.
2) verwenden Sie Nur der Variablen bei der onDataChange-Methode abgeschlossen ist.
3) führen Sie eine callback-Funktion in der Methode, wo Sie erklärt haben, Ihre Zuhörer.
Rufen Sie diese Funktion am Anfang und es wird immer die Aktualisierung der Variablen ct, wenn das Kind zählen, erhöht oder verringert in der FB Datenbank.
Hoffe es hilft