2016-09-28 3 views
2

ich addListenerForSingleValueEvent bin mit Daten aus Firebase-Datenbank abzurufen, und ich bekomme so etwas wie die folgenden:Extrahieren einzelner Werte von Firebase DataSnapshot

DataSnapshot { key = Food, value = {-key1=true, -key2=true, -key3=true} } 

Von diesem datasnopshot, wie kann ich Schlüsselfolgen des Nahrungsmittelwert extrahieren (zB -key, -key2 und -key3) um in einem Array wie array{-key1, -key2, -key3} zu speichern?

+0

Dies sieht aus wie eine typische 'für loop' mit Arrays Situation als mit Firebase oder Firebase-Datenbank. – Rexford

Antwort

2

Wenn Sie bereits einen Schnappschuss haben, können Sie Kinder mit child() Adresse:

public void onDataChange(DataSnapshot snapshot) { 
    System.out.println(snapshot.getKey()); // Food 
    System.out.println(snapshot.child("-key1").getValue()); // true 
} 

Sie können auch eine Schleife über die Kinder:

public void onDataChange(DataSnapshot snapshot) { 
    for (DataSnapshot child: snapshot.getChildren()) { 
     System.out.println(child.getKey()); // "-key1", "-key2", etc 
     System.out.println(child.getValue()); // true, true, etc 
    } 
} 
+0

In Szenario, in dem Sie eine weitere Schicht von Kindern haben (d. H. Insgesamt 3 Schichten). ** Wie effektiv werden zwei verschachtelte For-Loops sein, um die Endschicht zu erreichen? ** Oder schlagen Sie vor, diese Situation nicht gemeinsam zu erreichen? Es ist vielleicht nicht so ein großes Problem für eine kleine Datenbank ** aber was ist mit dem Fall, wenn Kinder zählen, ist in Tausenden oder Millionen. ** –

+1

Wenn Sie einen Listener an einen Speicherort anfügen, werden alle Daten unter diesem Speicherort auf den Client heruntergeladen und verfügbar im Schnappschuss. Die Schleife ist also eine lokale Operation. Ich denke, das beantwortet wahrscheinlich auch Ihre zweite Frage: Laden Sie keine großen Knoten herunter. In Firebase: Liest/synchronisiert nur Daten, die Sie dem Benutzer zeigen. –

+0

Super! Danke für die Antwort. Es ist sehr hilfreich. –

Verwandte Themen