Подтвердить что ты не робот

Как получить все дочерние данные в базе данных firebase?

У меня есть база данных firebase

введите описание изображения здесь

и мне нужно получить все номера телефонов пользователей, которые слушатель должен использовать для получения всех дочерних элементов?

Каждый пользователь добавляется как объект с идентификатором пользователя как имя этого объекта, мне нужно получить эти объекты, не зная, что идентификатор пользователя

Я искал документацию, связанную с DataSnapshot, но я не мог получить DataSnapshot без прослушивателя! правильно ли искать DataSnapshout или я должен использовать что-то еще

4b9b3361

Ответ 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. Большое спасибо!