Как запросить все дочерние элементы и получить корневое имя в базе данных firebased? - PullRequest
0 голосов
/ 16 сентября 2018

Я делаю приложение для Android. Я хочу публиковать объявления людей. Но я застрял одна проблема. Я не могу запросить всех детей. У меня есть 2 типа информации. Это выбранные категории и имя пользователя (@ перед словами.) Я хочу публиковать все объявления людей в соответствии с категорией. Но я не могу охватить всех детей и не знаю, как это сделать. Кстати; Когда я достиг всего ребенка. Я не знаю, как добраться до их корня. К сожалению: я не могу правильно объяснить мою проблему. Так что: я покажу вам с изображениями мою проблему.

Вот моя база на огне, как видеть:

enter image description here

Например: я ищу "Kadın Sağlığı".

enter image description here

После того, как мне нужно найти эти корни:

enter image description here

И, наконец, вот мой код:

    firebaseDatabase = FirebaseDatabase.getInstance();

        uzmanlar_firebaseDatabase = firebaseDatabase.getReference("Uzman/");
uzmanlar_firebaseDatabase.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        uzman_kisiler_ilanlar_array.clear();
        for (DataSnapshot ds : dataSnapshot.getChildren()) {


            String child = ds.getKey();
            uzman_kisiler_ilanlar_array.add(child);

            for (int i = 0; i < uzman_kisiler_ilanlar_array.size(); i++) {

              Log.i(TAG, "uzmanlarım: "  + uzman_kisiler_ilanlar_array.get(i).toString() + " " + uzman_kisiler_ilanlar_array.size() );

            }

        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});
 for (String s: uzman_kisiler_ilanlar_array
         ) {

        uzmanlar_yetenekler_firebaseDatabase = firebaseDatabase.getReference("Uzman/" + s + "/" +  "yetenekler/" );
        uzmanlar_yetenekler_firebaseDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot ds:dataSnapshot.getChildren()

                        ) {
                    String ss = ds.getValue().toString();

                    Log.i(TAG, "yetenekl: "  + ss  );

                }


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }

Как я могу это сделать?

1 Ответ

0 голосов
/ 16 сентября 2018

Вы путаете ребенка с корнем, вы, вероятно, имели в виду родителя соответствующего дочернего узла.

Я думаю, что вы хотите получить родительский элемент DatabaseReference от узла, который вы сейчас слушаете.Пожалуйста, проверьте DatabaseReference docs .

Вызов getParent() или getRoot() из dataSnapshot.getRef(), вероятно, сделает эту работу.

AsВ документах указано:

getRoot() возвращает ссылку на корневое местоположение этой базы данных Firebase.

getParent() DatabaseReference на родительское местоположение или nullесли этот экземпляр ссылается на корневую папку

Редактировать:

uzmanlar_firebaseDatabase.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        uzman_kisiler_ilanlar_array.clear();
        DatabaseReference root = dataSnapshot.getRef().getRoot();
        // Now you got the root
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...