[英]FireBase Recycler Adapter doesn't retrieve data from FireBase
My database looks like this我的数据库看起来像这样
I'm trying to fetch all this data from that USER ID inside Cart.我正在尝试从购物车中的该用户 ID 获取所有这些数据。 But my
RecyclerView
shows nothing.但我的
RecyclerView
什么也没显示。 After checking, the adapter.getItemCount()
returns 0. Where did I wrong?检查后,
adapter.getItemCount()
返回 0。我哪里错了? This is my code:这是我的代码:
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();
}
Model Model
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;
}
}
and ViewHolder和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);
}
}
This code seems to be the problem:这段代码似乎是问题所在:
cartList.orderByChild("userID").equalTo(userID)
This code takes every child nodes directly under cartList
and orders them on their userID
property.此代码将每个子节点直接放在
cartList
下,并根据它们的userID
属性对它们进行排序。 But there is no userID
property in your screenshot, so this results in an empty list.但是您的屏幕截图中没有
userID
属性,因此这会导致一个空列表。
My best guess is that the key of each node under cartList
is the user ID, in which case you can instead use:我最好的猜测是
cartList
下每个节点的键是用户 ID,在这种情况下,您可以改用:
cartList.child(userID)
So:所以:
final DatabaseReference cartList = FirebaseDatabase.getInstance().getReference().child("Cart");
FirebaseRecyclerOptions<Cart> options =
new FirebaseRecyclerOptions.Builder<Cart>()
.setQuery(cartList.child(userID),Cart.class).build();
I've finally figured it out.我终于想通了。 For some reason,
RecyclerView
on my CartActivity
needs time to load data in (Maybe cause I have 3 RecyclerView
on HomeActivity
and sometimes data show up and sometimes It don't, usually 1 or 2 / 3 RecyclerViews show data).出于某种原因,我的
CartActivity
上的RecyclerView
需要时间来加载数据(可能是因为我在HomeActivity
上有 3 个RecyclerView
,有时会显示数据,有时不会,通常 1 或 2 / 3 个 RecyclerViews 显示数据)。 When I reload (press back and Start Activity again), RecyclerView will appear and show data.当我重新加载(按回并再次启动活动)时,RecyclerView 将出现并显示数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.