Как получить определенные дочерние данные из firebase

Мне нужно получить доступ к определенному дочернему элементу из узла, у меня есть только «доступный ключ» конкретного дочернего элемента, а не полный путь.

Как получить определенные дочерние данные из firebase

что ты уже испробовал?

Alex Mamo 23.04.2019 12:57

Пожалуйста, взгляните на: firebase.google.com/docs/database/admin/retrieve-data

Joshua Best 23.04.2019 13:01

Вы включили изображение дерева JSON в свой вопрос. Пожалуйста, замените это фактическим JSON в виде текста, который вы можете легко получить, щелкнув ссылку «Экспорт JSON» в дополнительном меню (⠇) ваша консоль базы данных Firebase. Наличие JSON в виде текста делает его доступным для поиска, позволяет нам легко использовать его для тестирования с вашими фактическими данными и использовать его в нашем ответе, и в целом это просто хорошая вещь.

Frank van Puffelen 23.04.2019 15:19
2
3
2 959
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

попробуй это :-

DatabaseReference mUserNameReference = FirebaseDatabase.getInstance().getReference("School").child("id").child("id");
    mUserNameReference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    String email = dataSnapshot.child("email").getValue().toString());
                   //get all the key value like this
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });

измените оба дочерних идентификатора в соответствии с вашими идентификаторами

Sandeep Malik 23.04.2019 13:46

у меня есть только второй идентификатор, но не первый

MIrza Shafique 23.04.2019 13:50

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

Sandeep Malik 23.04.2019 13:51

сначала просто добавьте жесткий код и установите оба идентификатора и попробуйте, работает ли он

Sandeep Malik 23.04.2019 13:52

Просто добавьте этот код:

DatabaseReference db = FirebaseDatabase.getInstance().getReference().child("school").child(firebaseUser.getUid();

db.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String email = dataSnapshot.child("Email").getValue().toString();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

Если у вас есть ключ для этого дочернего элемента, но не полный путь, сначала получите ключ родительского узла в списке, как показано ниже.

 Arraylist<String> keyList =new Arraylist();
      DatabaseReference db = FirebaseDatabase.getInstance().getReference().child("school").child(firebaseUser.getUid();

        db.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                String key = childSnapshot.getKey();

                String value=  childSnapshot.getValue(String.class);

                keyList.add(key);

            }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });

теперь используйте цикл for или цикл foreach, чтобы проверить, содержит ли этот узел доступный дочерний ключ.

for(String key:keyList){



 DatabaseReference db = FirebaseDatabase.getInstance().getReference().child("school").child(key).orderByChild("id").equal(availableKey);

            db.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                    String key = childSnapshot.getKey();

                    Object object=  childSnapshot.getValue(Object.class);



                }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });







}

Надеюсь, что это поможет вам..

Ответ принят как подходящий

Поскольку вы знаете ключ ребенка, которого ищете, вы можете запросить его:

DatabaseReference schoolsRef = FirebaseDatabase.getInstance().getReference().child("School");
Query query = schoolsRef.orderByKey().equalTo("MZ3bW5kLJAQorgnZbYiTaOoWWSG2");

db.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
            String email = userSnapshot.child("email").getValue(String.class);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException();
    }
});

Обратите внимание, что вы не можете использовать orderByChild("id"), как объяснено в моем ответе. здесь: Двойной вложенный запрос Firebase.

Спасибо, братан, за предложение, "dataSnapshot.getValue().toString()" совершенно пуст.

MIrza Shafique 23.04.2019 18:01

Да, там у нас есть несколько ошибок. Поскольку это запрос, вам нужен цикл по снимку.

Frank van Puffelen 23.04.2019 18:30

Спасибо, братан, я могу сделать это с помощью циклов, но я ищу способ сделать это без циклов.

MIrza Shafique 23.04.2019 19:47

Нет. Поскольку вы не знаете родительский ключ, вам необходимо выполнить запрос. И результаты запроса могут (на уровне API) всегда содержать несколько дочерних элементов, поэтому вам нужно перебрать их.

Frank van Puffelen 23.04.2019 21:48

Также обратите внимание, что вы никогда не упоминали эту цель в своем первоначальном вопросе. Попробуйте привести лучший пример того, чего вы пытаетесь достичь, что вы уже пробовали и почему это не соответствует вашим потребностям.

Frank van Puffelen 23.04.2019 21:49

извините за неудобства и спасибо за отличное объяснение.

MIrza Shafique 24.04.2019 07:21

Другие вопросы по теме