2017-02-17 1 views
0

Ich befolge die Anleitung here zum Entfernen von Werten aus meiner Firebase-Datenbank. Hier ist die Struktur meiner Daten.Entfernen von Wert aus Android Firebase entfernt ganzen Knoten

|---users 
    |----KJSXd4ScEmJ6N4UFc5k 
      |---bookmarks 
       |---KdCyKdQkDg34ny6_H-C 
        |---id:"12d5j2fa-0f70-41c3-b4g4-4d66bdcef976" 
       |---KdCyKdQkDg34ny6_H-M 
        |---id:"fa95b1fa-b537-4d98-a0e7-a92ffea7b6a4" 

Hier ist der Code, den ich verwende.

Was passiert, ist der gesamte/Lesezeichen-Knoten wird bei diesem einzelnen Aufruf statt nur der Verweis auf das Lesezeichen gelöscht gelöscht. Wie kann ich erreichen, dass nur das einzelne Lesezeichen gelöscht wird, das ich löschen möchte, anstatt den ganzen Knoten?

Antwort

1

Wenn Sie eine Abfrage für die Firebase-Datenbank ausführen, werden möglicherweise mehrere Ergebnisse angezeigt. Der Snapshot enthält also eine Liste dieser Ergebnisse. Selbst wenn nur ein Ergebnis vorhanden ist, enthält der Snapshot eine Liste mit einem Ergebnis.

Also in Ihrem Fall ist der Snapshot nicht das Element, aber es ist das Gesamtergebnis der Abfrage. Daher gibt getRef() den Speicherort zurück, an dem Sie die Abfrage ausgelöst haben.

Die Lösung ist über die Ergebnisse Schleife und löschen jeweils einzeln:

public void onDataChange(DataSnapshot dataSnapshot) { 
    for (DataSnapshot child: dataSnapshot.getChildren()) { 
     child.getRef().removeValue(); 
    } 
} 
+0

Auf zusätzliche Folgefrage. Wenn Sie die Option haben, .orderBy() und .equalTo() hinzuzufügen, aber das Ergebnis nicht wirklich das einzige Ergebnis zurückgibt, was ist der Sinn der Verwendung von ihnen? Es gibt nur eine UUID für dieses Lesezeichen im Dataset, aber die Abfrage gibt das gesamte Dataset zurück. Dies schien die Antwort zu sein, aber ich suchte nach etwas in Firebase, das es mir erlauben würde, besser abzufragen und nicht einfach den gesamten Datensatz zurückgeben und dann die Ergebnisse analysieren zu müssen. – Landen

+0

Werte müssen nicht eindeutig sein, daher kann eine Abfrage mehrere Ergebnisse enthalten. Die Tatsache, dass es in Ihrem speziellen Fall nur ein Ergebnis gibt, ändert nicht den Rückgabetyp (was in den meisten typisierten Sprachen nicht möglich wäre). –

0

Warum sind Sie für diesen Knoten für die SingleValueEvent hören, versuchen Sie einfach den Code unten.

FirebaseDatabase.getInstance().getReference().child(MyConstants.FIREBASE_USERS_NODE).child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child(MyConstants.FIREBASE_BOOKMARKS_NODE).child(uuid).removeValue(); 
Verwandte Themen