Java 如何在firebase中进行查询?
我在Firebase中查询数据时遇到问题。我试着用与科学相等的学科来提问。我的引用是classes,然后我的child是key/id,之后我有一个称为user info的孩子。 以下是我的数据库结构:Java 如何在firebase中进行查询?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我在Firebase中查询数据时遇到问题。我试着用与科学相等的学科来提问。我的引用是classes,然后我的child是key/id,之后我有一个称为user info的孩子。 以下是我的数据库结构: "Classes" : { "-Li9nBUgnFmCWqUmwV5W" : { "class_info" : { "date_clasname" : "August 6, 2019", "room_number" : "131", "subject" : "Scien
"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());
}
});
}
//});
public class Science\u class扩展应用程序活动{
私有FirebaseDatabase数据库;
私有数据库参考myRef;
私人名单;
私人回收站;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u science\u Class);
recyclerview=(recyclerview)findViewById(R.id.rview);
database=FirebaseDatabase.getInstance();
myRef=database.getReference(“类”);
Query Query=myRef.orderByChild(“主题”).equalTo(“科学”);
System.out.println(查询);
addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
列表=新的ArrayList();
//StringBuffer StringBuffer=新的StringBuffer();
对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){
Class\u model new\u Class=dataSnapshot1.getValue(Class\u model.Class);
String nameofclass=new_class.getDate_clasname();
String teacherofclass=new_class.getTeacher();
字符串roomnumberofclass=new_class.getRoom_number();
String class_key=new_class.getUid();
Listdata Listdata=新的Listdata(班级名称、班级教师、班级房间号、班级钥匙);
//String name=userdetails.getName();
//字符串email=userdetails.getEmail();
//字符串地址=userdetails.getAddress();
setDate_类(类的名称);
settacher(类的教师);
listdata.setRnumber(roomnumberofclass);
list.add(listdata);
//Toast.makeText(MainActivity.this,“+名称,Toast.LENGTH_LONG.show();
}
RecycleServiceAdapter2 recycler=新的RecycleServiceAdapter2(列表);
RecyclerView.LayoutManager LayoutManager=新的LinearLayoutManager(Science\u classes.this);
recyclerview.setLayoutManager(layoutmanager);
setItemAnimator(新的DefaultItemAnimator());
recyclerview.setAdapter(回收器);
}
@凌驾
已取消的公共无效(DatabaseError错误){
AlertDialog AlertDialog=新建AlertDialog.Builder(Science_classes.this).create();
alertDialog.setTitle(“错误”);
alertDialog.setMessage(“检查您的连接!如果问题仍然存在,请发送电子邮件svhsdev@vigoschools.org!");
alertDialog.setButton(alertDialog.BUTTON_中性,“确定”,
新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
dialog.dismise();
}
});
alertDialog.show();
//无法读取值
//Log.w(标记“读取值失败”,error.toException());
}
});
}
//});
提前谢谢你…如果你有任何问题,请告诉我 为了能够查询科目等于
科学
的所有课程,请更改以下查询:
Query query = myRef.orderByChild("subject").equalTo("Science");
到
看,您缺少一个孩子,
class\u info
。BIULD引用时必须存在该项。那么错误是什么?@MohammadSommakia我不知道如何引用由firebase在我的查询中生成的唯一键的子项,因为每个子项都会发生更改。除了一个消息之外,没有错误,我应该考虑添加“.Noxon”:“主题”。“如果firebase生成的id下唯一的子项是class_info
,最简单的解决方案是删除它,并将firebase生成的值设置为您的键
,其余的class_info
值我需要它在其他地方@BenShmuel
Query query = myRef.orderByChild("class_info\subject").equalTo("Science");