Edit 2; vale la pena mettere sopra: Penso che valga la pena ricordare che questo è in realtà il download di tutti i dati in questa istantanea solo per verificare se esistono dati. Dovresti essere consapevole qui. Se il riferimento è enorme (ad esempio in realtà il riferimento di root e non un figlio/proprietà specifico), è necessario trovare un nodo più profondo che è possibile utilizzare per verificare l'esistenza o progettare la struttura di dati in modo diverso in modo da rendere possibile un controllo efficiente.
Un riferimento di database è effettivamente l'URL per tali dati. Si desidera effettivamente ottenere i dati per verificare se esiste un figlio. Questo è il motivo per cui il metodo che stai cercando è DataSnapshot.
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
void onDataChange(DataSnapshot snapshot) {
if (snapshot.hasChild("name")) {
// run some code
}
}
});
Ora, questo modello di progettazione si sente un po 'strano. Stai leggendo l'intero database solo per vedere se esiste "nome". Puoi renderlo un po 'più efficiente ascoltando rootRef.child("name")
e poi controllando solo se snapshot.exists()
.
Se si sta tentando di eseguire la convalida qui e non il controllo del flusso, è consigliabile prendere in considerazione questo codice nel proprio rules.json
.
Edit: Ho originariamente utilizzato il nome della funzione sbagliata (childExists invece di hasChild)
fonte
2016-05-23 22:21:13
http://stackoverflow.com/a/36826793/3145960 –
Eventuali duplicati di [intesa se i dati esiste in Firebase] (http://stackoverflow.com/questions/36826429/understanding-if-data-exists-in-firebase) –