我要做的是返回名为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
试试这个:
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
,具体取决于您从textview中检索的文本。
然后另外两个将从数据库中检索特定键下的name
和class
。
试试这个:创建一个名为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
类中有一种方法,所以它可能会干扰或某种东西。