2016-05-24 31 views
23

Sto utilizzando il database in tempo reale con Firebase di Google e sto cercando di verificare se esiste un bambino.Come posso verificare se esiste un valore del database Firebase?

mio database è strutturato nel modo seguente

-/(root) 
- /users/ 
–- /james/ 
-- /jake/ 
- /rooms/ 
-- /room1/ 
---  (room 1 properties) 
-- /room2/ 
---  (room 2 properties) 

Vorrei verificare se esiste room1. Ho provato quanto segue:

let roomName:String = "room1" 
roomsDB.child(roomName).observeSingleEventOfType(.Value) { 
(snap:FIRDataSnapshot) in 
    let roomExists:Bool = snap.value != nil ? "TAKEN" : "NOT TAKEN" 
} 

Accedendo snap.value restituisce un JSON delle proprietà di quella stanza, ma come vorrei verificare se la stanza (/rooms/room1/) è lì per cominciare?

Commento eventuale chiarimento è necessario

+0

@yahoo Come dovrei accedervi? Non riesco a vedere dove si trova nella documentazione di Swift. – Hidden14

+0

si prega di fare riferimento a questo. https://gist.github.com/anantn/4323949 –

risposta

49
self.ref = FIRDatabase.database().reference() 


    ref.child("rooms").observeSingleEventOfType(.Value, withBlock: { (snapshot) in 

     if snapshot.hasChild("room1"){ 

      print("true rooms exist") 

     }else{ 

      print("false room doesn't exist") 
     } 


    }) 
+0

questo codice è per il Firbase 3 (ultimo ... maggio 2016) – ismael33

+0

puoi controllare anche se c'è spazio con haschildren() se è falso, non ha spazio ... – ismael33

+1

Cosa succede se il parrent dell'oggetto che vuoi controllare ha un sacco di dati all'interno? Sarà tutto scaricato? – rhcpfan

6

ho alcuni suggerimenti utilizzando firebase.You controllare da Firebase.

Siamo in grado di verificare l'esistenza di alcuni tasti all'interno di un DataSnapshot utilizzando il suo metodo exists():

Un DataSnapshot contiene i dati da una posizione del database Firebase. Qualsiasi tempo di lettura dei dati da un database Firebase, i dati vengono ricevuti come DataSnapshot DataSnapshot.

Un DataSnapshot viene passato ai callback eventi che si allegano con on() o once(). È possibile estrarre il contenuto dell'istantanea come oggetto JavaScript chiamando il suo metodo val(). In alternativa, è possibile eseguire lo spostamento nell'istantanea chiamando child() per restituire le istantanee del bambino (che è possibile chiamare in seguito val()).

Un DataSnapshot è una copia immutabile generata in modo efficiente dei dati in un percorso di database. Non possono essere modificati e non cambieranno mai. Per modificare i dati, si usa sempre un riferimento Firebase direttamente.

esiste() - restituisce true se questo DataSnapshot contiene tutti i dati. È leggermente più efficiente dell'utilizzo dell'istantanea. val() !== null.

Esempio dalla documentazione Firebase (esempio JavaScript)

var ref = new Firebase("https://docs-examples.firebaseio.com/samplechat/users/fred"); 
ref.once("value", function(snapshot) { 
    var a = snapshot.exists(); 
    // a === true 

    var b = snapshot.child("rooms").exists(); 
    // b === true 

    var c = snapshot.child("rooms/room1").exists(); 
    // c === true 

    var d = snapshot.child("rooms/room0").exists(); 
    // d === false (because there is no "rooms/room0" child in the data snapshot) 
}); 

Inoltre si fa riferimento questo page (già accennato nel mio commento)

Qui c'è un esempio di utilizzo di Java.

Firebase userRef= new Firebase(USERS_LOCATION); 
userRef.child(userId).addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     if (snapshot.getValue() !== null) { 
      //user exists, do something 
     } else { 
      //user does not exist, do something else 
     } 
    } 
    @Override 
    public void onCancelled(FirebaseError arg0) { 
    } 
}); 

Spero che tu abbia un'idea ora.

+0

Capisco cosa stai dicendo, ma stavo cercando Firebase 3. Avrei dovuto specificare. Grazie per la risposta. – Hidden14

0

È possibile controllare il valore di snapshot.exists.

NSString *roomId = @"room1"; 
FIRDatabaseReference *refUniqRoom = [[[[FIRDatabase database] reference] 
             child:@"rooms"] 
            child:roomId]; 

[refUniqRoom observeSingleEventOfType:FIRDataEventTypeValue 
          withBlock:^(FIRDataSnapshot * _Nonnull snapshot) { 

    bool isExists = snapshot.exists; 
    NSLog(@"%d", isExists); 
}]; 
0

Utilizzare uno di essi Così semplice e facile ... Quale modo che ti piace

ValueEventListener responseListener = new ValueEventListener() { 
    @Override  
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.exists()) { 
      // Do stuff   
     } else { 
      // Do stuff   
     } 
    } 

    @Override  
    public void onCancelled(DatabaseError databaseError) { 

    } 
}; 

FirebaseUtil.getResponsesRef().child(postKey).addValueEventListener(responseListener); 

function go() { 
    var userId = prompt('Username?', 'Guest'); 
    checkIfUserExists(userId); 
} 

var USERS_LOCATION = 'https://SampleChat.firebaseIO-demo.com/users'; 

function userExistsCallback(userId, exists) { 
    if (exists) { 
    alert('user ' + userId + ' exists!'); 
    } else { 
    alert('user ' + userId + ' does not exist!'); 
    } 
} 

// Tests to see if /users/<userId> has any data. 
function checkIfUserExists(userId) { 
    var usersRef = new Firebase(USERS_LOCATION); 
    usersRef.child(userId).once('value', function(snapshot) { 
    var exists = (snapshot.val() !== null); 
    userExistsCallback(userId, exists); 
    }); 
} 

Firebase userRef= new Firebase(USERS_LOCATION); 
userRef.child(userId).addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     if (snapshot.getValue() !== null) { 
      //user exists, do something 
     } else { 
      //user does not exist, do something else 
     } 
    } 
    @Override 
    public void onCancelled(FirebaseError arg0) { 
    } 
}); 
Problemi correlati