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

时间:2018-03-05 16:56:36

标签: android firebase firebase-realtime-database

我要做的是返回名为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

2 个答案:

答案 0 :(得分: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,具体取决于您从文本视图中检索的文字。

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

答案 1 :(得分: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类中有一个方法,所以它可能会干扰什么。