我有一个关于药房帐户的节点,孩子是药房的id,每个孩子都包含药房的名字和id,还有更多的信息。现在我有了药房的名字,想要得到药房的ID,有什么功能可以这样做吗?

发布于 2021-04-25 00:32:22
您要查找的是数据库查询,它允许您根据属性值筛选节点下的结果。
在这种情况下会是这样的:
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));
            }
        }
    }
});result.getChildren()上的循环是必要的,因为查询可以有多个结果。尽管这里可能只有一个结果,但仍然需要循环。
发布于 2021-04-25 01:29:05
我使用了上面的代码,但是在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) {
         }
     });https://stackoverflow.com/questions/67248059
复制相似问题