Как получить значение Child of childs из firebase в java - PullRequest
0 голосов
/ 05 июня 2018

Data structure

Из этого я хочу взять значение электронной почты от mailID и тему, заголовок из mailText.i я могу получить доступ к значению одного ребенка, нокогда он показывает ноль с когда пытаешься получить со всеми тремя.

Следующий код работает для одного ребенка:

DatabaseReference databaseRef = database.getReference("/");
    databaseRef.addValueEventListener(new ValueEventListener() {
                 public void onDataChange(DataSnapshot dataSnapshot) {
                    ArrayList<String> email = new ArrayList();
                     for (DataSnapshot sd: dataSnapshot.getChildren()) {
                         String emailStr = sd.child("email").getValue(String.class);
                         email.add(emailStr);
                         System.out.println(email);
                         }
                     latch.countDown();
                     }

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

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Предполагая, что узел new является прямым потомком вашего корня Firebase, чтобы добиться того, что вы объяснили в своих комментариях, используйте следующие строки кода:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference newRef = rootRef.child("new");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.child("mailID").getChildren()) {
            String email = ds.child("email").getValue(String.class);
            String name = ds.child("name").getValue(String.class);
            Log.d("TAG", email + " / " + name);
        }
        for(DataSnapshot ds : dataSnapshot.child("mailText").getChildren()) {
            String title = ds.child("title").getValue(String.class);
            String subject = ds.child("subject").getValue(String.class);
            Log.d("TAG", title + " / " + subject);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
newRef.addListenerForSingleValueEvent(valueEventListener);

Как видите,вам нужно присоединить слушателя на одну ступень выше в вашей древовидной иерархии и дважды зациклить детей, используя метод getChildren().

0 голосов
/ 05 июня 2018

Вам нужно изменить структуру базы данных (нет объединения в firebase), чтобы иметь возможность запрашивать и получать необходимые данные:

new
  mailId
     email: userx@gmail.com
     name:userx
     title: test title
     Body: test body

Тогда вы сможете получить необходимые данные дляпользователь.

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

DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("new");
ref.orderByChild("email").equalTo("userx@gmail.com");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...