我的数据库结构如下所示:
现在我想只检索属于" menu1"的产品,然后用它们填充ListView,我已经有了类Products,有什么方法可以将查询与FireBaseListAdapter结合起来,首先得到属于菜单的所有产品(例如" menu1"或" menu2"),然后将它与FireBaseListAdapter一起使用,任何人都可以帮我查询,如何实现它?
p.s它适用于Android应用程序。
答案 0 :(得分:2)
你可以在这里使用DatabaseReference
,因为它扩展了Query
类。
DatabaseRefernce mRef = FirebaseDatabase.getInstance()
.getReference("menus/menu1/listofproducts");
或者,如果您已经对要使用的根(restraunt-f08bd)有一个引用mRef
,则可以使用以下查询
Query menu1ProductsRef = mRef.child("menus/menu1/listofproducts");
然后在其中一个上设置EventListener
。
在其中任何一个查询中,您都可以使用以下代码添加ChildEventListener
DatabaseReference productsRef = mRef.child("products");
menu1ProductsRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
productsRef.child(dataSnapshot.getKey()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Add this product to your ListAdapter's ArrayList and notifyDataSetChanged()
//Assuming you have a Product class with the necessary variables, getters and setters for these, and an empty constructor
Product product = dataSnapshot.getValue(Product.class);
productArrayList.add(product);
productListAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
//Add the corresponding code for this case
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
//Add the corresponding code for this case
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
//Add the corresponding code for this case
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
})