从Firebase获取子节点?

3
我有以下结构。
root
    -sections
        -section1
            -student1
                -GPA
                -lastname
            -student2
                -GPA
                -lastname
        -section2
            -student1
                -GPA
                -lastname

我需要获得用户所需学生的GPA

我正在这样做:

String student = student.getText().toString(); //Student1/Student2 entered
String section = section.getText().toString();
    //This is Section1, Student1, say (obtained from EditText)...

然后我在进行

myref = FirebaseDatabase.getInstance().getReference().child("sections");
myref1 = myref.child(section).child(student).child("GPA");
myref1.addValueEventListener(new ValueEventListener() {
  public void onDataChange(DataSnapshot dataSnapshot) {
    String gpa = dataSnapshot.getValue().toString();
  }
  public void onCancelled(DatabaseError databaseError) {}
});

我得到的结果是0.0。我错在哪里了?

学生在该部分的GPA值可能为0.0。您是否调试了应用程序并查看了为什么打印当前结果? - UmarZaii
是的,我已经在日志和textView中打印了该值(以防万一)。这就是我知道该值为0.0的方式。 - evan
它是3和4之间的一个值(例如:3.1、3.75、4.0等)。 - evan
也许你需要在你的问题中包含更多的代码。从我所看到的情况来看,你的代码似乎是没问题的。 - UmarZaii
@FrankvanPuffelen - 我对硬编码的值没有问题。我也不介意接受输入,因为我在代码的另一部分中也使用了相同的变量。 - evan
显示剩余2条评论
1个回答

0

通常用户需要在可以读写数据库之前进行身份验证。你在控制台中禁用了规则,还是有些用户已经登录了?

你可以在这张图片中看到规则选项卡:https://www.novoda.com/blog/content/images/2016/06/Screenshot_20160621_174302.png

编辑

代码似乎没问题,也许"section"和"student"这些键出了问题。你可以使用硬编码的字符串来测试它。


@janik:这也是我的第一反应。但如果用户没有权限,onDataChange 将不会被调用。 - Frank van Puffelen
@Frank van Puffelen:代码看起来没问题,也许是“section”和“student”这些键出了问题。您可以通过使用硬编码字符串进行测试。 - Reflekti0n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接