Java 使用FirebaseRecyclerAdapter遍历Firebase中对象中的对象
我读了一些关于我的问题的书&虽然很多人指出使用DataSnapshot.forEach来解决我的问题,但我想知道是否可以在FirebaseRecyclerAdapter中修改我的查询以满足我的需要 这是我目前拥有的结构,其中一个请求可能有1个或多个订单。每个订单都有一组值,比如restaurantID。 我希望基本上遍历所有这些请求&只显示那些与某个餐厅有订单的请求 在我的应用程序中,用户登录并具有restaurantID的值。我想在我的RecyclerView中根据该值仅显示与该帐户相关的订单 下面是代码。我试图在populateViewHolder中做一些有趣的事情,用以色列的订单来解决这个问题,但没有完全奏效。我希望能在这方面得到任何帮助,我已经陷入困境&有一段时间没有取得任何进展。这将是令人敬畏的进步 谢谢大家! OrderStatus.java Request.javaJava 使用FirebaseRecyclerAdapter遍历Firebase中对象中的对象,java,android,firebase,android-recyclerview,Java,Android,Firebase,Android Recyclerview,我读了一些关于我的问题的书&虽然很多人指出使用DataSnapshot.forEach来解决我的问题,但我想知道是否可以在FirebaseRecyclerAdapter中修改我的查询以满足我的需要 这是我目前拥有的结构,其中一个请求可能有1个或多个订单。每个订单都有一组值,比如restaurantID。 我希望基本上遍历所有这些请求&只显示那些与某个餐厅有订单的请求 在我的应用程序中,用户登录并具有restaurantID的值。我想在我的RecyclerView中根据该值仅显示与该帐户相关的订单
如果要根据resturantID检索数据,则需要执行以下操作:
requests = database.getReference("Requests").child("1582094998206").child("order");
Query resturantQuery = requests.orderByChild("restaurantID").equalTo("01");
然后在FirebaseRecyclerAdapter中使用resturantQuery。我最终找到了一个解决方案。用当前的数据库模式继续这条路线似乎不是一个可行的选择,所以我致力于重新构建它。使用常规的.orderByChildrestaurantID.equalTo01可以从那里开始工作
如果这不起作用,我将要探索的是构建我自己的适配器&ViewHolder,并找到使用Firebase的ValueListener检索所需数据的方法 您的订单始终包含一个订单还是可能会添加另一个订单?它们可能包含多个订单。例如,你可以吃一个三明治和一个比萨饼,顺序相同。对不起,我想我理解你的要求。每个请求将有一个订单列表。在此列表中,您可以拥有多个对象,这些对象对应于用户购物车中的特定食物选项。如果用户订购比萨饼和三明治,订单将有一个ID=0&ID=1的对象,对应于这两个元素。这难道不是只适用于ID为158094998206的一个请求吗?我想遍历存储在数据库中的所有请求。你不想这样吗?我想基本上遍历所有这些请求&只显示那些与某家餐厅有订单的请求?对不起,我一定说错了。我想查看请求158294998206、1582095037988以及数据库中的任何其他请求。然后,对于每一个,我将检查order数组。在这个数组中,我想显示restaurantID==01的对象。这有意义吗?您可以创建一个查询orderByKey.start152。。然后添加一个监听器,这将检索数据,然后在onDataChange u中迭代并执行另一个查询,但这次它将类似于childkey.childorder.orderByChildresturantID.equalTo01,然后在回收服务中使用该查询我不能100%确定这意味着什么,但它给了我指针&今天晚些时候我将尝试它。谢谢
public class OrderViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnCreateContextMenuListener{
public TextView orderID;
public TextView orderStatus;
public TextView orderMenu;
private ItemClickListener itemClickListener;
public OrderViewHolder(@NonNull View itemView) {
super(itemView);
orderID = (TextView) itemView.findViewById(R.id.orderID);
orderStatus = (TextView) itemView.findViewById(R.id.orderStatus);
orderMenu = (TextView) itemView.findViewById(R.id.orderMenu);
itemView.setOnClickListener(this);
itemView.setOnCreateContextMenuListener(this);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Select an action");
menu.add(0, 0, getAdapterPosition(), "Update");
menu.add(0, 1, getAdapterPosition(), "Delete");
}
public void setItemClickListener(ItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}
@Override
public void onClick(View v) {
//No onClick => otherwise it throws an error.
//itemClickListener.onClick(v, getAdapterPosition(), false);
}
}
public class Request {
private String email;
private String name;
private List<Order> order;
private String restriction;
private String status;
public Request() { }
public Request(String email, String name, String restriction, List<Order> order) {
this.email = email;
this.name = name;
this.restriction = restriction;
this.order = order;
this.status = "0"; //0: Placed. 1: Ready. 2: Picked up.
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getRestriction() {
return restriction;
}
public void setRestriction(String restriction) {
this.restriction = restriction;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Order> getOrder() {
return order;
}
public void setOrder(List<Order> order) {
this.order = order;
}
}
requests = database.getReference("Requests").child("1582094998206").child("order");
Query resturantQuery = requests.orderByChild("restaurantID").equalTo("01");