Как я могу получить несколько значений нескольких узлов, используя Datasnapshot из базы данных Firebase? - PullRequest

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Если вы хотите получить особый доступ только к dayVisitors под Noida Sec 1, вы можете просто реализовать это, используя:

final FirebaseDatabase db = FirebaseDatabase.getInstance();
DatabaseReference ref = db.getReference("Noida Sec1");
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

                for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                        if(childSnapshot.hasChild("dayVisitor")) {
                            for (DataSnapshot visitorSnapshot : childSnapshot.child("dayVisitor").getChildren()) {
                                 Visitor visitorObject = visitorSnapshot.getValue(Visitor.class); //or whatever your dayVisitor object is 
                                //now you can access visitorObject with the fields you created and do whatever like add it to an arraylist
                            }
                        }
                }

        }  @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.e("READ FAILED", databaseError.getMessage());
        }
    });

Я не уверен, что делает ваш код, однако я советую, есливозможно, вы пытаетесь отформатировать структуру базы данных, чтобы она была максимально плоской, потому что вложение данных таким способом может стать очень грязным и неэффективным.Возможно, сделайте dayVisitor полем в посетителе, а не собственным дочерним узлом.

0 голосов
/ 08 февраля 2019

Прежде всего, получите ссылку на потомков Noida Sec 1, например:

DatabaseReference mNoidaReference = mFirebaseDatabase.getReference().child("Noida Sec1");

Теперь создайте для него childEventListener и переберите его, чтобы найти дочернего элемента dayVisitor

ChildEventListener  mChildEventListener = new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            for(Datasnapshot data: dataSnapshot.child("dayVisitor")){
              String dayVisitor = data.getValue();
            }
        }

        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

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

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