如何在不知道子对象的情况下,根据子对象内部的值获取子对象。在android firebase实时数据库中

如何在不知道子对象的情况下,根据子对象内部的值获取子对象。在android firebase实时数据库中,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有一个用于药房帐户的节点,子节点是药房的id每个子节点包含药房的名称和id以及一些其他信息。现在我有了药房的名字,想得到药房的ID,有什么功能可以做到这一点吗 您要查找的是一个数据库查询,它允许您根据属性值筛选节点下的结果 在这种情况下,应该是这样的: DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Pharmacies"); Query query = ref.orderByChil

我有一个用于药房帐户的节点,子节点是药房的id每个子节点包含药房的名称和id以及一些其他信息。现在我有了药房的名字,想得到药房的ID,有什么功能可以做到这一点吗


您要查找的是一个数据库查询,它允许您根据属性值筛选节点下的结果

在这种情况下,应该是这样的:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Pharmacies");
Query query = ref.orderByChild("PharmacyName").equalTo("El Ezaby");
query.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DataSnapshot> task) {
        if (!task.isSuccessful()) {
            Log.e("firebase", "Error getting data", task.getException());
        }
        else {
            DataSnapshot result = task.getResult();
            for (DataSnapshot snapshot: result.getChildren()) {
                Log.i("firebase", snapshot.child("PharmacyID").getValue(String.class));
            }
        }
    }
});
databasereferef=FirebaseDatabase.getInstance().getReference(“药房”);
Query Query=ref.orderByChild(“PharmacyName”).equalTo(“El-Ezaby”);
query.get().addOnCompletListener(新的OnCompletListener()){
@凌驾
未完成的公共void(@NonNull任务){
如果(!task.issusccessful()){
Log.e(“firebase”,“获取数据时出错”,task.getException());
}
否则{
DataSnapshot result=task.getResult();
对于(DataSnapshot快照:result.getChildren()){
Log.i(“firebase”、snapshot.child(“PharmacyID”).getValue(String.class));
}
}
}
});
由于查询可以有多个结果,因此需要循环
result.getChildren()
。即使这里可能只有一个结果,您仍然需要循环。

我使用了上面的代码,但query.get出现错误 下面的代码与我一起工作
非常感谢你的帮助和你的时间,我很感激。不客气。
 DatabaseReference databaseReference1=FirebaseDatabase.getInstance().getReference("Pharmacies");
     databaseReference1.addValueEventListener(new ValueEventListener() {
         @Override
         public void onDataChange(@NonNull DataSnapshot snapshot) {
           for(DataSnapshot dataSnapshot:snapshot.getChildren()){
               Pharmacies pharmacies=dataSnapshot.getValue(Pharmacies.class);
               if(pharmacies!=null){
                   if(pharmacyName.contains(pharmacies.getPharmacyName())){
                        Log.e("firebase", dataSnapshot.child("PharmacyID").getValue(String.class));
                        pharmacyid=dataSnapshot.child("PharmacyID").getValue(String.class);

                   }
               }
           }
         }

         @Override
         public void onCancelled(@NonNull DatabaseError error) {

         }
     });