我在Firebase中查询数据时遇到问题。我正在尝试按与科学相等的主题进行查询。我的参考是类,然后我的孩子是键/ ID,然后我有一个孩子,称为用户信息。
这是我的数据库结构:
"Classes" : {
"-Li9nBUgnFmCWqUmwV5W" : {
"class_info" : {
"date_clasname" : "August 6, 2019",
"room_number" : "131",
"subject" : "Science",
"teacher" : "Ms.Henry",
"id" : "-Li9nBUgnFmCWqUmwV5W"
}
},
"-Li9n_IYwbTNPdNAsTAu" : {
"class_info" : {
"date_clasname" : "August 6, 2019",
"room_number" : "131",
"subject" : "Math",
"teacher" : "Ms.Henry",
"id" : "-Li9n_IYwbTNPdNAsTAu"
}
},
"-Li9naUipsa865NBpZjW" : {
"class_info" : {
"date_clasname" : "August 6, 2019",
"room_number" : "131",
"subject" : "Other",
"teacher" : "Ms.Henry",
"id" : "-Li9naUipsa865NBpZjW"
}
},
"-Li9nbpwp2qchwmZRDP9" : {
"class_info" : {
"date_clasname" : "August 6, 2019",
"room_number" : "131",
"subject" : "Technology",
"teacher" : "Ms.Henry",
"id" : "-Li9nbpwp2qchwmZRDP9"
}
},
"-Li9ne0NDyjcB4SIWi1z" : {
"class_info" : {
"date_clasname" : "August 6, 2019",
"room_number" : "131",
"subject" : "Social Studies",
"teacher" : "Ms.Henry",
"id" : "-Li9ne0NDyjcB4SIWi1z"
}
}
},
这是我执行查询活动的代码:
public class Science_classes extends AppCompatActivity {
private FirebaseDatabase database;
private DatabaseReference myRef;
private List<Listdata> list;
private RecyclerView recyclerview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_science_classes);
recyclerview = (RecyclerView) findViewById(R.id.rview);
database = FirebaseDatabase.getInstance();
myRef = database.getReference("Classes");
Query query = myRef.orderByChild("subject").equalTo("Science");
System.out.println(query);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
list = new ArrayList<>();
// StringBuffer stringbuffer = new StringBuffer();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
Class_model new_class = dataSnapshot1.getValue(Class_model.class);
String nameofclass = new_class.getDate_clasname();
String teacherofclass = new_class.getTeacher();
String roomnumberofclass = new_class.getRoom_number();
String class_key = new_class.getUid();
Listdata listdata = new Listdata(nameofclass, teacherofclass, roomnumberofclass, class_key);
//String name = userdetails.getName();
//String email = userdetails.getEmail();
//String address = userdetails.getAddress();
listdata.setDate_class(nameofclass);
listdata.setTeacher(teacherofclass);
listdata.setRnumber(roomnumberofclass);
list.add(listdata);
// Toast.makeText(MainActivity.this,""+name,Toast.LENGTH_LONG).show();
}
RecyclerviewAdapter2 recycler = new RecyclerviewAdapter2(list);
RecyclerView.LayoutManager layoutmanager = new LinearLayoutManager(Science_classes.this);
recyclerview.setLayoutManager(layoutmanager);
recyclerview.setItemAnimator(new DefaultItemAnimator());
recyclerview.setAdapter(recycler);
}
@Override
public void onCancelled(DatabaseError error) {
AlertDialog alertDialog = new AlertDialog.Builder(Science_classes.this).create();
alertDialog.setTitle("Error");
alertDialog.setMessage("Check your connection! If, problem persists please email svhsdev@vigoschools.org!");
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alertDialog.show();
// Failed to read value
// Log.w(TAG, "Failed to read value.", error.toException());
}
});
}
//});
预先谢谢您...如果您有任何疑问,请告诉我!
最佳答案
为了能够查询主题等于science
的所有类,请更改以下查询:
Query query = myRef.orderByChild("subject").equalTo("Science");
至
Query query = myRef.orderByChild("class_info\subject").equalTo("Science");
看,您缺少一个孩子,
class_info
。引用参考时必须存在。