Как получить все дочерние данные в базе данных firebase?
У меня есть база данных firebase
![введите описание изображения здесь]()
и мне нужно получить все номера телефонов пользователей, которые слушатель должен использовать для получения всех дочерних элементов?
Каждый пользователь добавляется как объект с идентификатором пользователя как имя этого объекта, мне нужно получить эти объекты, не зная, что идентификатор пользователя
Я искал документацию, связанную с DataSnapshot
, но я не мог получить DataSnapshot
без прослушивателя! правильно ли искать DataSnapshout или я должен использовать что-то еще
Ответы
Ответ 1
Сначала загрузите данные пользователя.
//Get datasnapshot at your "users" root node
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users");
ref.addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Get map of users in datasnapshot
collectPhoneNumbers((Map<String,Object>) dataSnapshot.getValue());
}
@Override
public void onCancelled(DatabaseError databaseError) {
//handle databaseError
}
});
Затем пройдите через пользователей, получив доступ к их карте и собирая телефонное поле.
private void collectPhoneNumbers(Map<String,Object> users) {
ArrayList<Long> phoneNumbers = new ArrayList<>();
//iterate through each user, ignoring their UID
for (Map.Entry<String, Object> entry : users.entrySet()){
//Get user map
Map singleUser = (Map) entry.getValue();
//Get phone field and append to list
phoneNumbers.add((Long) singleUser.get("phone"));
}
System.out.println(phoneNumbers.toString());
}
Этот прослушиватель будет извлекать только данные, когда явным образом вызывается. Рассмотрите возможность хранения списка номеров под "allPhoneNumbers" node в дополнение к вашим пользователям node. Это позволит сделать ваши данные легче и легче обрабатывать при сборе всех номеров. Если вы скажете, что сотни пользователей, то "данные пользователя" будут слишком большими, а список "allPhoneNumbers" будет намного более эффективным.
Вышеприведенный код был протестирован в вашей тестовой базе данных и работает. Тем не менее, ваше поле телефона может быть отправлено в String или int в зависимости от типа поля вашего пользовательского телефона.
Ответ 2
DatabaseReference ref1= FirebaseDatabase.getInstance().getReference();
DatabaseReference ref2,ref3,ref4;
ref2 = ref1.child("User");
ref2.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Userlist = new ArrayList<String>();
// Result will be holded Here
for (DataSnapshot dsp : dataSnapshot.getChildren()) {
Userlist.add(String.valueOf(dsp.geValue())); //add result into array list
}
/* userlist will store all values of users, then point to every userlist item
and get mobile numbers*/
Ответ 3
Вы можете попробовать это:
Firebase ref = new Firebase(FIREBASE_URL);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
Log.e("Count " ,""+snapshot.getChildrenCount());
for (DataSnapshot postSnapshot: snapshot.getChildren()) {
<YourClass> post = postSnapshot.getValue(<YourClass>.class);
Log.e("Get Data", post.<YourMethod>());
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Log.e("The read failed: " ,firebaseError.getMessage());
}
});
Ответ 4
потому что это было опубликовано почти 3 года назад, могу ли я задать очень близкий вопрос по этому поводу?
так вот моя база данных, и я хочу собрать все alamat
как этот пост хочу собрать все номера телефонов.
вот мой код
var optList = {"method" : "get"};
var recordName = "diki";
var rsltList = UrlFetchApp.fetch("https://martabak-bot.firebaseio.com/" + recordName + "/.json", optList );
var importdb = JSON.parse(rsltList);
var posting= (importdb.alamat);
до сих пор я могу собрать Дики alamat
и поместить его в переменную для posting
поэтому, если я хочу собрать весь alamat
, что мне делать? этот datasnapshot
тоже работает? но я не вижу, чтобы он закончился с сохраненной переменной.
спасибо за ответ, я действительно только вводя кодирование JS. Большое спасибо!