firebase-database
Daten lesen
Suche…
Verstehen, welche Daten von getReference () referenziert werden
In diesem Beispiel verwenden wir diese Datenbank:
"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"
}
}
}
Wenn Sie die obige Datenbank verwenden, dann:
FirebaseDatabase.getInstance().getReference()zeigt auf das übergeordnete Projekt Ihres Projekts,
"your-project-name". DerdataSnapshotIhnen erfasstedataSnapshotenthält also alle darin enthaltenen Daten, einschließlich der Daten für"users"und"books".FirebaseDatabase.getInstance().getReference("users")undFirebaseDatabase.getInstance().getReference().child("users")wird das gleiche Ergebnis haben und auf
"your-project-name/users"FirebaseDatabase.getInstance().getReference("users/randomUserId1")undFirebaseDatabase.getInstance().getReference().child("users/randomUserId1")undFirebaseDatabase.getInstance().getReference().child("users").child("randomUserId1")hat das gleiche Ergebnis und zeigt auf
"your-project-name/users/randomUserId1"
Hinweis: Dieses Beispiel ist erforderlich, um vollständig zu verstehen, welche Daten sich im dataSnapshot-Objekt befinden
Verstehen, welche Daten sich im dataSnapshot-Objekt befinden
Hinweis: Sie müssen zuerst wissen, welche Daten von getReference () referenziert werden, bevor Sie dieses Beispiel vollständig verstehen können.
Es gibt drei gängige Methoden, um Ihre Daten aus der Firebase-Echtzeitdatenbank abzurufen:
-
addValueEventListener() -
addListenerForSingleValueEvent() -
addChildEventListener()
Wenn wir darüber sprechen, welche Daten sich im dataSnapshot Objekt befinden, sind addValueEventListener() und addListenerForSingleValueEvent() grundsätzlich gleich. Der einzige Unterschied besteht darin, dass addValueEventListener() die Änderungen in den referenzierten Daten addListenerForSingleValueEvent() jedoch nicht.
Angenommen, wir haben diese Datenbank:
"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"
}
}
}
Von addValueEventListener und addListenerForSingleValueEvent erzeugter DataSnapshot
dataSnapshot der von addValueEventListener() und addListenerForSingleValueEvent() wird, enthält den Wert der exakten Daten, auf die er verweist. Wie , wenn ref Punkt ist "your-project-name" dann dataSnapshot sollte sein:
... 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"
}
}
}
Von addChildEventListener erzeugter DataSnapshot
dataSnapshot das von addChildEventListener() wird, enthält einen oder addChildEventListener() Datenwerte, die eine Ebene tiefer in den Daten liegen, auf die sie verweist. Wie in diesen Fällen:
Wenn ref auf "your-project-name" dataSnapshot sollte dataSnapshot lauten:
... 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
Ich weiß, dass wir .getValue() anstelle von getKey() verwenden .getValue() . Aber hier verwenden wir getKey da es immer einen String enthält und nicht in ein benutzerdefiniertes Objekt oder eine Map oder ein anderes konvertiert werden muss. Wenn Sie wissen, in welchen Schlüssel dataSnapshot zeigt, können Sie leicht wissen, welchen Wert es enthält, und es in Ihr eigenes benutzerdefiniertes Objekt (oder irgendetwas) analysieren.