簡體   English   中英

如何在Firebase數據庫中從子級檢索特定數據

[英]How to retrieve particular data from the child in Firebase databse

我是Firebase數據庫的新手,我在Firebase中的數據結構如下:

Root- users-sec_a, sec_b, sec_c

在每個部分(sec_a,sec_b,sec_c)中,都會有用戶的uid。 在每個部分中,至少有40個uid。 並且在所有uid中都有一個公共數據子對象(名稱,rollno,出勤率),現在我的問題是我只想顯示一個部分中存在的所有uid的名稱和rollno(要顯示的部分由用戶輸入)。

我如何獲得這些數據?

這很容易。

String sectionSelectedByUser = "sec_a"; // For example

現在得到Firebase數據庫的認可

if (FirebaseAuth.getInstance().getCurrentUser() != null){ // if you need user to be signed in.. 
            FirebaseDatabase.getInstance().getReference().child("users").child(sectionSelectedByUser).addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) { // iterates through all your UID in this section
                        if (childSnapshot.hasChild("name")){ // if current uid has name then fetch it
                            String name = childSnapshot.child("name").getValue().toString();
                        }

                        if (childSnapshot.hasChild("rollno")){ // if current UID has rollno then fetch it
                            String rollno =  childSnapshot.child("rollno").getValue().toString();
                        }
                    }
                }

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

                }
            });
        }

您可以使用Fire base數據庫的子方法檢索嵌套數據。

對於您的問題,您可以按要求使用此代碼,而無需進行任何修改。

ValueEventListener singleEventListener = new ValueEventListener() {

    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot != null) {
            Student student = dataSnapshot.getValue(Student.class);

            Log.d("TAG","name: "+student.getName());
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d("onCancelled - ", databaseError.toException());
    }
};

if (mFirebaseDatabaseReference == null) {
    mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference();
    //mFirebaseDatabaseReference.keepSynced(true);
}
mFirebaseDatabaseReference = mFirebaseDatabaseReference.child(Constant_String.Table_User);
mFirebaseDatabaseReference.addListenerForSingleValueEvent(singleEventListener);

希望這會有所幫助...

假設您的數據庫架構如下所示:

Firebase-root
   |
   --- users
         |
         --- sec_a
         |    |
         |    --- uid
         |    |    |
         |    |    --- rollno: "Roll Number"
         |    |    |
         |    |    --- name: "User Name"
         |    |    |
         |    |    --- attendance: true
         |    |
         |    --- //other 40 users
         |
         --- sec_b
         |
         --- sec_c

並且,例如,如果您只想顯示部分之一(例如sec_a )中存在的所有uid的名稱和rollno,請使用以下代碼:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference sectionRef = rootRef.child("users").child("sec_a");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.child("name").getValue(String.class);
            String rollno = ds.child("rollno").getValue(String.class);
            Log.d(TAG, name + " / " + rollno);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage());
    }
};
sectionRef.addListenerForSingleValueEvent(valueEventListener);

暫無
暫無

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

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