英文:
How to retrieve mulitple child nodes from firebase in android studio
问题
我正在尝试从数据库中获取与特定用户相关的数据,并在Android Studio的用户界面上显示。在Firebase中,数据的格式如下:
"studentNumber": {
"1234567": {
"CS320": {
"Lab 1": "80%",
"Lab 2": "90%"
},
"CS255": {
"Lab 1": "30%"
}
},
"6234567": {
"CS320": {
"Lab 1": "70%",
"Lab 2": "100%"
},
// ...
},
// ...
}
我正在尝试获取所有数据/子节点,即所有模块、后续实验和后续成绩,与一个特定学生相关联,并在他们的Android Studio屏幕上显示。然而,到目前为止,我只能够将数据返回到Android Studio控制台,而不是应用程序界面。
这是我用来获取数据的代码:
databaseReference = FirebaseDatabase.getInstance().getReference("User").child("0000");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Log.v("E_Value", "Data: " + dataSnapshot.getValue());
}
// ...
});
任何帮助都将非常感谢。
英文:
I am trying to get data relating to a specific user in the database returned to a users screen in android studio. The data in firebase takes a format like so :
"studentNumber" : {
"1234567" : {
"CS320" :{
"Lab 1" : "80%",
"Lab 2" : "90%"
},
"CS255" :{
"Lab 1" :"30%"
}
},
"6234567" : {
"CS320" :{
"Lab 1" : "70%",
"Lab 2" : "100%"
},
and so on like that.
I am trying to get all data/child nodes ie all modules, subsequent labs and subsequent grades relating to one singular student returned to their screen in android studio, however, so far I have only been able to get the data returning to the console in android studio instead of the application screen.
This is the code I'm using to get the data.
databaseReference = FirebaseDatabase.getInstance().getReference("User").child("0000");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Log.v("E_Value","Data :" +dataSnapshot.getValue());
}
}
Any help would be great thanks.
答案1
得分: 0
// 以下是翻译好的代码部分:
// 我没有测试过这段代码,但大致框架应该是这样的。
// 你应该获取一个键,然后调用一个函数来获取与该键相关的值和它们的子节点及其值。
databaseReference = FirebaseDatabase.getInstance().getReference("User").child("0000");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
String studentKey = dataSnapshot1.getKey();
fetchDetails(studentKey);
}
}
});
public void fetchDetails(String studentKey) {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("User").child("0000").child(studentKey);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
String courseKey = dataSnapshot1.getKey(); // 这应该打印出 CS320
fetchDetailsOfCourse(courseKey);
}
}
});
}
public void fetchDetailsOfCourse(String courseKey) {
System.out.println("Course key: " + courseKey);
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("User").child("0000").child(studentKey).child(courseKey);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String lab1 = dataSnapshot.child("lab1").getValue(String.class);
String lab2 = dataSnapshot.child("lab2").getValue(String.class);
System.out.println("Lab1 value: " + lab1); // 这应该获取 lab1 的值
System.out.println("Lab2 value: " + lab2); // 这应该获取 lab2 的值
}
});
}
英文:
I didn't test the code, however the outline should look like this.
You should be fetching one key and call a function to obtain the value and the subsequent nodes related to it and their values.
databaseReference = FirebaseDatabase.getInstance().getReference("User").child("0000");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
String studentKey = dataSnapshot1.getKey();
fetchDetails(studentKey);
}
}
}
public void fetchDetails(String studentKey) {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("User").child("0000").child(studentKey);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
String courseKey = dataSnapshot1.getKey(); //this should print CS320
fetchDetailsOfCourse(courseKey);
}
}
}
}
public void fetchDetailsOfCourse(String courseKey) {
System.out.System.out.println("Course key: " + courseKey);
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("User").child("0000").child(studentKey).child(courseKey);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String lab1 = dataSnapshot.child("lab1").getValue(String.class);
String lab2 = dataSnapshot.child("lab2").getValue(String.class);
System.out.println("Lab1 value: " + lab1); //this should get the values for lab1
System.out.println("Lab2 value: " + lab2); //this should get the values for lab2
}
}
}
}
专注分享java语言的经验与见解,让所有开发者获益!
评论