簡體   English   中英

如何使用Firebase數據庫中的Datasnapshot獲取多個節點的多個值?

[英]How can i get Multiple values of multiple nodes using Datasnapshot from the Firebase Database?

我想顯示所有日期的dayVisitors。 因此,我想訪問Noida Sec1 /所有日期下的所有dayVisitors。 數據庫結構 這是我所做的,但是它給出了空指針錯誤:嘗試在空對象引用上調用虛擬方法'java.lang.String com.example.thehighbrow.visitormanagement.DayVisitor.getName()'。

如果您只想專門訪問Noida Sec 1下的dayVisitors,則可以使用以下方法簡單地實現此目的:

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設為訪問者中的字段,而不是其自己的子節點。

首先獲得對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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM