firebase-database
Чтение данных
Поиск…
Понимание данных, на которые ссылается getReference ()
В этом примере мы используем эту базу данных:
"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"
}
}
}
Если вы используете вышеуказанную базу данных, тогда:
FirebaseDatabase.getInstance().getReference()будет указывать на родительские данные
"your-project-name"данные"your-project-name". Таким образом,dataSnapshotвамиdataSnapshotбудет содержать все данные внутри него, включая все данные"users"и"books".FirebaseDatabase.getInstance().getReference("users")иFirebaseDatabase.getInstance().getReference().child("users")будет иметь тот же результат, указывая на
"your-project-name/users"FirebaseDatabase.getInstance().getReference("users/randomUserId1")иFirebaseDatabase.getInstance().getReference().child("users/randomUserId1")иFirebaseDatabase.getInstance().getReference().child("users").child("randomUserId1")будет иметь тот же результат, указывая на
"your-project-name/users/randomUserId1"
Примечание: этот пример необходим, чтобы полностью понять, какие данные находятся внутри объекта dataSnapshot
Понимание того, какие данные находятся внутри объекта dataSnapshot
Примечание. Прежде чем вы сможете полностью понять этот пример, вам нужно знать, какие данные ссылаются на getReference () .
Существует три распространенных метода получения данных из базы данных Firebase Realtime:
-
addValueEventListener() -
addListenerForSingleValueEvent() -
addChildEventListener()
Когда мы говорим о том, какие данные находятся внутри объекта dataSnapshot , тогда addValueEventListener() и addListenerForSingleValueEvent() в основном то же самое. Единственное различие заключается в том, что addValueEventListener() продолжает прослушивать изменения, сделанные в ссылочных данных, а addListenerForSingleValueEvent() - нет.
Поэтому рассмотрим, что у нас есть эта база данных:
"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, созданный addValueEventListener и addListenerForSingleValueEvent
dataSnapshot созданный addValueEventListener() и addListenerForSingleValueEvent() будет содержать значения ( addListenerForSingleValueEvent() точных данных, на которые он ссылается. Например, когда ref указывает на "your-project-name" тогда dataSnapshot должен быть:
... 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, созданный addChildEventListener
dataSnapshot созданный addChildEventListener() будет содержать значения (ы) данных на один уровень глубже внутри данных, на которые он ссылается. Как в этих случаях:
Когда ref указывает на "your-project-name" тогда dataSnapshot должен быть:
... 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
Я знаю, скорее всего, мы захотим использовать .getValue() вместо getKey() . Но здесь мы используем getKey потому что он всегда будет содержать одну строку и не нужно преобразовывать в пользовательский объект, карту или другую. В основном, когда вы знаете, к какому ключу dataSnapshot указывает, вы можете легко узнать, какое значение оно содержит, и проанализировать его в свой собственный obeject (или что-то еще)