如何在firebase中检索兄弟节点的值?

问题描述 投票:2回答:2

我要做的是返回名为class的名为m1的密钥的值,其中包含一个名为name的兄弟


这是我的数据库的样子

enter image description here


这是我的代码的样子

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("Medicines");
        final Query userQuery = rootRef.orderByChild("name").equalTo(textView.getText().toString());

        userQuery.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                String myParentNode = dataSnapshot.getKey();
                for (DataSnapshot child: dataSnapshot.getChildren())
                {
                    String key = child.getKey().toString();
                    String value = child.getValue().toString();

                    txt1.setText(myParentNode);

                    DatabaseReference childRef = FirebaseDatabase.getInstance().getReference().child(myParentNode);
                childRef.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        String class_ = dataSnapshot.getValue().toString();         txt2.setText(class_);
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {}
                });
            }
            }

然而它只是给了我错误T.T

android firebase firebase-realtime-database
2个回答
1
投票

试试这个:

 DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("Medicines");
    final Query userQuery = rootRef.orderByChild("name").equalTo(textView.getText().toString());

    userQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
   String keys=datas.getKey();
   String class=datas.child("class").getValue().toString();
   String name=datas.child("name").getValue().toString();
  }
 }
    @Override
  public void onCancelled(DatabaseError databaseError) {
  }
  });

datasnasphot是medicines然后查询是orderByChild("name").equalTo(textView.getText().toString());等于textView中的值。

String keys=datas.getKey();这将为您提供密钥,可以是m1m2m3,具体取决于您从textview中检索的文本。

然后另外两个将从数据库中检索特定键下的nameclass


0
投票

试试这个:创建一个名为Medicine的类(如果你还没有)并使它有两个String变量nameclass并创建一个构造函数,getter和setter方法然后使用这个方法:

public String getClassOfMedicineById(String id){
    final String medicineClass = "";
    FirebaseDatabase.getInstance().getReference("medicine-handbook").child("Medicines")
            .child(id)
            .addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    Medicine medicine = dataSnapshot.getValue(Medicine.class);
                    medicineClass = medicine.get_class();
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
    return medicineClass;
}

然后称它为:getClassOfMedicineById("m1");哦,不要叫你的类getter方法getClass()。我认为在Object类中有一种方法,所以它可能会干扰或某种东西。

© www.soinside.com 2019 - 2024. All rights reserved.