FireBase Recycler Adapter 不从 FireBase 检索数据

FireBase Recycler Adapter doesn't retrieve data from FireBase

我的数据库是这样的

我正在尝试从购物车中的那个用户 ID 获取所有这些数据。但是我的 RecyclerView 什么也没显示。查了一下,adapter.getItemCount() returns 0。我哪里错了?这是我的代码:

onStart()

private void loadData(){
        auth = FirebaseAuth.getInstance().getCurrentUser();
        userID = auth.getUid();
        final DatabaseReference cartList = FirebaseDatabase.getInstance().getReference().child("Cart");
        FirebaseRecyclerOptions<Cart> options =
                new FirebaseRecyclerOptions.Builder<Cart>()
                .setQuery(cartList.child(userID),Cart.class).build();
        FirebaseRecyclerAdapter<Cart,CartHolder> adapter
                = new FirebaseRecyclerAdapter<Cart, CartHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull CartHolder holder, int position, @NonNull Cart model) {
                holder.txtGia.setText(model.getTotal());
            }

            @NonNull
            @Override
            public CartHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cart_item,parent,false);
                CartHolder holder = new CartHolder(view);
                return holder;
            }
        };
        recyclerView.setAdapter(adapter);
        adapter.startListening();
    }

型号

    public class Cart {
        public String pID,num,time,addr,total,userID;
        public Cart(){}
    
        public Cart(String num,String pID,String time,String addr,String total,String userID) {
            this.num = num;
            this.pID = pID;
            this.time = time;
            this.addr = addr;
            this.total = total;
            this.userID = userID;
        }
    
        public String getNum() {
            return num;
        }
    
        public String getpID() {
            return pID;
        }
    
        public String getTime() {
            return time;
        }
    
        public String getAddr() {
            return addr;
        }
    
        public String getTotal() {
            return total;
        }
    
        public String getUserID() {
            return userID;
        }
    }

ViewHolder

public class CartHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public ImageView shibaImg;
    public TextView txtTen,txtMota,txtGia,txtThoigian;
    ItemClickListener listener;

    public CartHolder(@NonNull View itemView) {
        super(itemView);
        shibaImg = (ImageView) itemView.findViewById(R.id.cart_item_img);
        txtTen = (TextView) itemView.findViewById(R.id.cart_item_ten);
        txtMota = (TextView) itemView.findViewById(R.id.cart_item_mota);
        txtGia = (TextView) itemView.findViewById(R.id.cart_item_gia);
        txtThoigian = (TextView) itemView.findViewById(R.id.cart_item_history);

    }
    public void setItemClickListener(ItemClickListener listener){
        this.listener = listener;
    }

    @Override
    public void onClick(View v) {
        listener.onClick(v, getAdapterPosition(),false);
    }
}

这段代码似乎是问题所在:

cartList.orderByChild("userID").equalTo(userID)

此代码获取直接位于 cartList 下的每个子节点,并在它们的 userID 属性 上对它们进行排序。但是您的屏幕截图中没有 userID 属性,因此结果为空列表。

我最好的猜测是 cartList 下每个节点的 key 是用户 ID,在这种情况下,您可以改用:

cartList.child(userID)

所以:

final DatabaseReference cartList = FirebaseDatabase.getInstance().getReference().child("Cart");
FirebaseRecyclerOptions<Cart> options =
        new FirebaseRecyclerOptions.Builder<Cart>()
        .setQuery(cartList.child(userID),Cart.class).build();

我终于想通了。 出于某种原因,我的 CartActivity 上的 RecyclerView 需要时间来加载数据(可能是因为我在 HomeActivity 上有 3 个 RecyclerView,有时数据显示,有时不显示,通常是 1 或 2 / 3 RecyclerViews 显示数据)。当我重新加载时(按返回并再次启动 Activity),RecyclerView 将出现并显示数据。