【问题标题】:Firebase QueriesFirebase 查询
【发布时间】:2018-04-12 00:40:01
【问题描述】:

我在数据库中有这个:

当老师添加一个班级和一个节时,使用节点Class 下的push() 生成一个随机ID。 还有一个 Student 和一个 Teacher 具有 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 中添加学生名?

编辑:

如果我查询 ClassStudent ,我想在一个活动中检索班级名称,然后在另一个活动中,我想检索班级的学生姓名。我不希望 Studentname 出现在 ClassStudent 中,因为从逻辑上讲我认为它似乎不正确。

示例: 1. 学生注册自己的班级(创建一个随机的id,属性为classid和studentid)。

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

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

#3.查询后的输出:

Peter Haddad
John
Phillip
//names

【问题讨论】:

  • 那么你想检索ClassStudent节点下的所有Studentname?我说的对吗?
  • 是的,它就像一个加入 sql,我必须在另一个 DatabaseReference 中放入一个 DatabaseReference

标签: android firebase firebase-realtime-database


【解决方案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

【讨论】:

  • 我的意思是在节点 ClassStudent 中没有Studentname,我只想要 ClassStudent 中的 studentid,所以如果您再次阅读问题中的最后一句话,我必须进行连接。我说Studentname 里面没有ClassStudent
  • 我完全不理解你。 Firebase 没有加入。请给我一个示例,说明您希望获得哪些数据以及基于什么?您可以使用另一个包含更多数据的数据库结构来更改您的数据库结构,然后向我显示所需的数据。你想在你的输出中有什么?
  • 基本上是这个:stackoverflow.com/questions/41135658/…,我昨天试过了,但是遇到了一个与 firebase 无关的错误,今天晚些时候我会尝试修复它。
  • 好的。如果你没有成功,只需回答我最后的问题并更新你的数据库结构。
猜你喜欢
  • 2020-08-19
  • 1970-01-01
  • 2021-11-17
  • 2017-02-09
  • 2021-02-09
  • 2017-01-30
  • 2017-11-25
  • 2018-03-05
相关资源
最近更新 更多