我要做的是返回名为class
的节点名为m1
的键的值,其中包含名为name
的兄弟
这是我的数据库的样子
这是我的代码看起来像
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
答案 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();
这会让您获得密钥m1
或m2
或m3
,具体取决于您从文本视图中检索的文字。
然后其他两个将从数据库中检索特定键下的name
和class
。
答案 1 :(得分:0)
试试这个:
创建一个名为Medicine的类(如果你还没有)并使它有两个String变量name
和class
并创建一个构造函数,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
类中有一个方法,所以它可能会干扰什么。