如何在插入过程中使用push时查询Firebase下的数据?

时间:2018-04-11 14:41:54

标签: java android firebase firebase-realtime-database

-patient
  -9876543210
    -hjsfrhwugfshgjgjwwg
      -name
      -description
      -tokennumber
      -disease
      -date-'24/12/91'
    -hjsfrhwugfshgjgjwwg
      -name
      -description
      -tokennumber
      -disease
      -date-'24/12/91'
  -9876543211

我有这样的数据。我想要显示所有符合条件的孩子,日期= 24/12/91。在使用push之前我可以从patient检索所有子数据。但是在使用我无法检索的唯一键之后。这是我之前的代码。

我有这样的数据。我想要显示所有遇到条件的孩子,日期= 24/12/91。在使用push之前我可以从patient检索所有子数据。但是在使用我无法检索的唯一键之后。这是我之前的代码。

DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
                Query query = reference.child("patient").orderByChild("dates").equalTo(date);
                query.addListenerForSingleValueEvent(new ValueEventListener() {

                    public ArrayList<HashMap> hashMap;
                    public HashMap<String, String> hash;




                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        if (dataSnapshot.exists()) {
                            medical_list = new ArrayList<>();

                            for (DataSnapshot patient : dataSnapshot.getChildren()) {

                                String name = patient.child("name").getValue(String.class);
                                String description = patient.child("description").getValue(String.class);
                                String tokennumber = patient.child("tokennumber").getValue(String.class);
                                String disease = patient.child("disease").getValue(String.class);

                                medicaldetail medi = new medicaldetail(name, description, tokennumber, disease);
                                medical_list.add(medi);

                            }

                            act_adapter obj = new act_adapter(Reports.this, medical_list);
                            listview.setAdapter(obj);
                            obj.notifyDataSetChanged();

                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
    `


  [1]: https://i.stack.imgur.com/spcZt.png

2 个答案:

答案 0 :(得分:0)

您的代码中的问题是您在查询中遗漏了一个孩子,为此,请更改以下代码行:

Query query = reference.child("patient").orderByChild("dates").equalTo(date);

为:

Query query = reference.child("patient").child(patientId).orderByChild("dates").equalTo(date);

其中patientId是您正在寻找满足条件的患者的身份。例如,可能是:9876543210

修改

根据您的评论,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference patientRef = rootRef.child("patient");

ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String mobileNumber = ds.getKey();

            DatabaseReference mobileNumberRef = patientRef.child("mobileNumber");
            Query query = mobileNumberRef.orderByChild("dates").equalTo(date);
            ValueEventListener eventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
                        String name = dSnapshot.child("name").getValue(String.class);
                        Log.d("TAG", name);
                    }
                }

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

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
patientRef.addListenerForSingleValueEvent(valueEventListener);

答案 1 :(得分:0)

像这样更改您的查询..

Query query = reference.child("patient").child("9876543210").child(databasereferenceobject.getKey()).orderByChild("date").equalTo(date);