Java 使用FirebaseRecyclerAdapter遍历Firebase中对象中的对象

Java 使用FirebaseRecyclerAdapter遍历Firebase中对象中的对象,java,android,firebase,android-recyclerview,Java,Android,Firebase,Android Recyclerview,我读了一些关于我的问题的书&虽然很多人指出使用DataSnapshot.forEach来解决我的问题,但我想知道是否可以在FirebaseRecyclerAdapter中修改我的查询以满足我的需要 这是我目前拥有的结构,其中一个请求可能有1个或多个订单。每个订单都有一组值,比如restaurantID。 我希望基本上遍历所有这些请求&只显示那些与某个餐厅有订单的请求 在我的应用程序中,用户登录并具有restaurantID的值。我想在我的RecyclerView中根据该值仅显示与该帐户相关的订单

我读了一些关于我的问题的书&虽然很多人指出使用DataSnapshot.forEach来解决我的问题,但我想知道是否可以在FirebaseRecyclerAdapter中修改我的查询以满足我的需要

这是我目前拥有的结构,其中一个请求可能有1个或多个订单。每个订单都有一组值,比如restaurantID。 我希望基本上遍历所有这些请求&只显示那些与某个餐厅有订单的请求

在我的应用程序中,用户登录并具有restaurantID的值。我想在我的RecyclerView中根据该值仅显示与该帐户相关的订单

下面是代码。我试图在populateViewHolder中做一些有趣的事情,用以色列的订单来解决这个问题,但没有完全奏效。我希望能在这方面得到任何帮助,我已经陷入困境&有一段时间没有取得任何进展。这将是令人敬畏的进步

谢谢大家!

OrderStatus.java

Request.java


如果要根据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");