【问题标题】:FireBase Recycler Adapter doesn't retrieve data from FireBaseFireBase Recycler Adapter 不从 FireBase 检索数据
【发布时间】:2023-03-25 15:17:01
【问题描述】:

我的数据库是这样的

我正在尝试从购物车中的该 USER ID 获取所有这些数据。但是我的RecyclerView 什么也没显示。检查后,adapter.getItemCount() 返回 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);
    }
}

【问题讨论】:

  • 我的查询错了吗?
  • 嘿,你启用了proguard规则吗?
  • 是的,我做到了!太奇怪了,我将它用于 Firebase 中的另一个表,它可以工作,但不适用于这个。
  • 嘿,你有没有在你的 proguard 规则中添加这个:-keep class your.app.package.model.**{*;}
  • 我有,但仍然没有工作。

标签: java android firebase-realtime-database firebaseui


【解决方案1】:

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

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();

【讨论】:

  • 我试过了,但我的RecyclerView 还是什么都没有,adapter 的大小是 0,先生。
  • 这出乎意料。您可以编辑您的问题以显示更新后的代码吗?
  • 我尝试将userIDorderByChild(userID) 添加到表中,但忘记更新。对不起先生
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多