firebase-database
Lecture des données
Recherche…
Comprendre quelles données référencées par getReference ()
Dans cet exemple, nous utilisons cette base de données:
"your-project-name" : {
"users" : {
"randomUserId1" : {
"display-name" : "John Doe",
"gender" : "male"
}
"randomUserId2" : {
"display-name" : "Jane Dae",
"gender" : "female"
}
},
"books" {
"bookId1" : {
"title" : "Adventure of Someone"
},
"bookId1" : {
"title" : "Harry Potter"
},
"bookId1" : {
"title" : "Game of Throne"
}
}
}
Si vous utilisez la base de données ci-dessus, alors:
FirebaseDatabase.getInstance().getReference()pointera vers le parent de votre projet, les données
"your-project-name". Ainsi, ledataSnapshotvous avez acquis contiendra toutes les données qu'il contient, y compris toutes"users"données"users"et les"books".FirebaseDatabase.getInstance().getReference("users")etFirebaseDatabase.getInstance().getReference().child("users")aura le même résultat, pointant vers
"your-project-name/users"FirebaseDatabase.getInstance().getReference("users/randomUserId1")etFirebaseDatabase.getInstance().getReference().child("users/randomUserId1")etFirebaseDatabase.getInstance().getReference().child("users").child("randomUserId1")aura le même résultat, pointant vers
"your-project-name/users/randomUserId1"
Remarque: cet exemple est nécessaire pour bien comprendre quelles données se trouvent dans l'objet dataSnapshot
Comprendre quelles données se trouvent dans l'objet dataSnapshot
Remarque: Vous devez d'abord connaître les données référencées par getReference () avant de pouvoir comprendre pleinement cet exemple.
Il existe trois méthodes courantes pour obtenir vos données à partir de la base de données Firebase Realtime:
-
addValueEventListener() -
addListenerForSingleValueEvent() -
addChildEventListener()
Lorsque nous parlons des données dataSnapshot objet dataSnapshot , addValueEventListener() et addListenerForSingleValueEvent() sont fondamentalement les mêmes. La seule différence est que addValueEventListener() garde les modifications apportées aux données référencées, alors que addListenerForSingleValueEvent() ne l’est pas.
Alors considérez que nous avons cette base de données:
"your-project-name" : {
"users" : {
"randomUserId1" : {
"display-name" : "John Doe",
"gender" : "male"
}
"randomUserId2" : {
"display-name" : "Jane Dae",
"gender" : "female"
}
},
"books" {
"bookId1" : {
"title" : "Adventure of Someone"
},
"bookId1" : {
"title" : "Harry Potter"
},
"bookId1" : {
"title" : "Game of Throne"
}
}
}
DataSnapshot produit par addValueEventListener et addListenerForSingleValueEvent
dataSnapshot produit par addValueEventListener() et addListenerForSingleValueEvent() contiendra la ou les valeurs des données exactes dans addListenerForSingleValueEvent() il est référencé. Comme quand ref est dataSnapshot sur "your-project-name" alors dataSnapshot devrait être:
... onDataChange(DataSnapshot dataSnapshot) {
dataSnapshot.getKey(); // will have value of String: "your-project-name"
for (DataSnapshot snapshot : dataSnapshot) {
snapshot.getKey(); // will have value of String: "users", then "books"
for (DataSnapshot deeperSnapshot : dataSnapshot) {
snapshot.getKey();
// if snapshot.getKey() is "users", this will have value of String: "randomUserId1", then "randomUserId2"
// If snapshot.getKey() is "books", this will have value of String: "bookId1", then "bookId2"
}
}
}
DataSnapshot produite par addChildEventListener
dataSnapshot produit par addChildEventListener() contiendra la ou les valeurs de données d'un niveau plus profond dans les données dataSnapshot il est référencé. Comme dans ces cas:
Quand ref est dataSnapshot sur "your-project-name" alors dataSnapshot devrait être:
... onChildAdded(DataSnapshot dataSnapshot, String s) {
dataSnapshot.getKey(); // will have value of String: "users", then "books"
for (DataSnapshot snapshot : dataSnapshot) {
snapshot.getKey();
// if dataSnapshot.getKey() is "users", this will have value of String: "randomUserId1", then "randomUserId2"
// If dataSnapshot.getKey() is "books", this will have value of String: "bookId1", then "bookId2"
for (DataSnapshot deeperSnapshot : dataSnapshot) {
snapshot.getKey();
// if snapshot.getKey() is "randomUserId1" or "randomUserId1", this will have value of String: "display-name", then "gender"
// But the value will be different based on key
// If snapshot.getKey() is "books", this will have value of String: "title", but the value will be different based on key
}
}
}
// dataSnapshot inside onChildChanged, onChildMoved, and onChildRemoved will have the same data as onChildAdded
Je sais que nous voudrons probablement utiliser .getValue() au lieu de getKey() . Mais ici, nous utilisons getKey car il contiendra toujours une chaîne et pas besoin de convertir en objet personnalisé, en carte ou autre. Fondamentalement, lorsque vous savez sur quelle clé dataSnapshot pointe, vous pouvez facilement savoir quelle valeur il contient et l'analyser dans votre propre objet personnalisé (ou n'importe quoi)