作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
阅读文档后,我了解了如何从数据库中提取单个值,但不确定如何从同一位置提取多个值。例如,我希望按成绩对学生进行排名。所以我使用 orderByChild("grade"),它是一个 int,然后我希望获得前十名,所以我使用 limitToLast(10) 因为较高的等级将排在最后。我对如何遍历并将数据推送到正确的变量感到困惑。
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference gradeRef = rootRef.child("test_scores").child("english_grades");
Query gradeRef = gradeRef.orderByChild("grade").limitToLast(10);
gradeRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
// Handling the post
int gradeOne = 0;
int gradeTwo = 0;
int gradeThree = 0;
String studentOne = "";
String studentTwo = "";
String studentThree = "";
for (DataSnapshot ds: dataSnapshot.getChildren()) {
gradeOne = ds.child("grade").getValue(Integer.class);
gradeTwo = ds.child("grade").getValue(Integer.class);
gradeThree = ds.child("grade").getValue(Integer.class);
studentOne = ds.child("student").getValue(String.class);
studentTwo = ds.child("student").getValue(String.class);
studentThree = ds.child("student").getValue(String.class);
}
gradeOne.setText(Integer.toString(gradeOne));
gradeTwo.setText(Integer.toString(gradeTwo));
gradeThree.setText(Integer.toString(gradeThree));
studentNameTV.setText(studentOne);
studentNameTV2.setText(studentTwo);
studentNameTV3.setText(studentThree);
}
{
"test_scores" : {
"english_grades" : {
"-Lo0W8ks7WCEsrym5Qpl" : {
"name" : "Melissa",
"grade" : 88
},
"-Lo0W92WqeUMdq_y7J8M" : {
"name" : "Tom",
"grade" : 95
},
"-Lo0W9KjzXE_XCU4K8MN" : {
"name" : "Andrew",
"grade" : 89
}
}
}
}
我想从结果中看到的是 StudentName = "Tom"Grade = "95"StudentName = "Andrew"Grade = "89"StudentName = "Melissa"Grade = "88"。
最佳答案
要将数据设置为不同的 View ,请使用以下 for 循环:
for (DataSnapshot ds: dataSnapshot.getChildren()) {
String name = ds.child("name").getValue(String.class);
String grade = ds.child("grade").getValue(Integer.class);
if(name.equals("Tom")) {
gradeOne.setText(Integer.toString(grade));
studentNameTV.setText(name);
}
if(name.equals("Andrew")) {
gradeTwo.setText(Integer.toString(grade));
studentNameTV2.setText(name);
}
if(name.equals("Melissa")) {
gradeThree.setText(Integer.toString(grade));
studentNameTV3.setText(name);
}
}
请注意,第二个属性名称是 "name"
而不是 "student"
。
关于java - 如何遍历数据库中的子项并将它们应用于变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57823349/
我是一名优秀的程序员,十分优秀!