Firebase查询

时间:2017-10-30 22:44:37

标签: android firebase firebase-realtime-database

我在数据库中有这个:

https://codepen.io/anon/pen/YEPMLb

当教师添加课程和部分时,会使用节点push()下的Class生成随机ID。 还有StudentTeacher节点,其中包含ID和属性。

学生加入课程,因此也会在ClassStudent中使用上述属性创建随机ID。

在节点Student中,id是当前的userid,在其下面有属性。现在我的问题是,它是从Student节点检索名称并将其添加到ClassStudent节点的好方法吗?

我正在使用此代码:

DatabaseReference gets=FirebaseDatabase.getInstance().getReference().child("Student");
final DatabaseReference getid=FirebaseDatabase.getInstance().getReference().child("Class");
ValueEventListener valueEventListener1= new ValueEventListener() {
               @Override
               public void onDataChange(DataSnapshot dataSnapshot) {
                   for(DataSnapshot child: dataSnapshot.getChildren()) {
                       String classnames = child.child("Classname").getValue().toString();
                       if (returnString.equals(classnames)) {
                           String getids = child.getKey();
                           newtable.child("ClassId").setValue(getids);
                       }
                   }
               }
               @Override
               public void onCancelled(DatabaseError databaseError) {
               }
           };
           getid.addValueEventListener(valueEventListener1);

我有一个名字的原因是因为我以后想点击一个类并获得该类中的名字列表。因此,如果我在节点ClassStudent中添加Student id(已经完成),我将如何点击检索Students的名称而不在ClassStudent中有学生名?

编辑:

enter image description here

如果我在ClassStudent上查询,我想在一个活动中检索类名,然后在另一个活动上检索,我想检索一个类的学生名称。我不希望Studentname在ClassStudent中,因为从逻辑上看,我觉得它似乎不正确。

实施例: 1.学生在课堂上注册自己(带有属性classid的随机id,并创建studentid)。

  1. 然后我想检索onResume()中的类名,所以登录后的类就在活动中(比如ClassStudent和Class`之间的联接)

  2. 在完全不同的活动中,我想检索列表中的studentnames,同时还要查询ClassStudent(例如ClassStudentStudent之间的联接)

  3. 查询后输出#3.

    Peter Haddad
    John
    Phillip
    //names
    

1 个答案:

答案 0 :(得分:1)

要获取ClassStudent节点下的所有stundet名称,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference classStudentRef = rootRef.child("ClassStudent");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String Studentname = ds.child("Studentname").getValue(String.class);
            Log.d("TAG", Studentname);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
classStudentRef.addListenerForSingleValueEvent(eventListener);

你的外出将是:

Peter Haddad
//other names