2016-05-23 54 views
20

Sto provando a creare un'app su Android. Devo controllare se un determinato elemento del mio database su firebase ha un figlio con un nome specifico. Speravo che potrebbe essere fatto utilizzando qualcosa sulla falsariga di:Google firebase verifica se esiste un figlio

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 

if (rootRef.childExists("name")) { 
    //run some code 
} 

ho cercato ma non ho trovato nulla di utile. Grazie per l'aiuto in anticipo.

+0

http://stackoverflow.com/a/36826793/3145960 –

+0

Eventuali duplicati di [intesa se i dati esiste in Firebase] (http://stackoverflow.com/questions/36826429/understanding-if-data-exists-in-firebase) –

risposta

42

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)

+0

Giusto per chiarire: è possibile accedere ai dati su Firebase senza un listener? – zomnombom

+2

Presumo che tu stia chiedendo perché non vuoi che la funzione di callback venga eseguita più e più volte. Il "singolo" nel codice sopra significa che questo si attiva solo una volta. –

+0

Sì. Grazie mille! – zomnombom

1

Provate ad usare .childexists in combinazione con .equalTo("Your specific name")