gpt4 book ai didi

java - 如何遍历数据库中的子项并将它们应用于变量

转载 作者:行者123 更新时间:2023-11-29 22:51:50 25 4
gpt4 key购买 nike

阅读文档后,我了解了如何从数据库中提取单个值,但不确定如何从同一位置提取多个值。例如,我希望按成绩对学生进行排名。所以我使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com