我是Firebase数据库的新手,我在Firebase中的数据结构如下:
Root- users-sec_a, sec_b, sec_c
在每个部分(sec_a,sec_b,sec_c)中,都会有用户的uid。在每个部分中,至少有40个uid。并且在所有uid中都有一个通用的数据子级(名称,rollno,出勤率) 现在我的问题是我只想显示部分之一(要显示的部分由用户输入)中存在的所有uid的名称和rollno。
如何获取这些数据?
答案 0 :(得分:1)
这很容易。
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) {
}
});
}
答案 1 :(得分:1)
您可以使用Fire base数据库的 child method 来检索嵌套数据。
对于您的问题,您可以按要求使用此代码,而无需进行任何修改。
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);
希望这会有所帮助...
答案 2 :(得分:0)
假设您的数据库架构如下:
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);