#java #android #firebase-realtime-database #firebaseui
#java #Android #firebase-realtime-database #firebaseui
Вопрос:
Моя база данных выглядит следующим образом
Я пытаюсь извлечь все эти данные из этого идентификатора ПОЛЬЗОВАТЕЛЯ внутри корзины. Но мой 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);
}
}
Комментарии:
1. Мой запрос неверен?
2. эй, вы включили правила proguard?
3. Да, я это сделал! Так странно, что я использую это для другой таблицы в Firebase, и это работает, но не для этой.
4. эй, а вы добавили это в свои правила proguard:
-keep class your.app.package.model.**{*;}
5. У меня было и до сих пор не работает.
Ответ №1:
Похоже, проблема в этом коде:
cartList.orderByChild("userID").equalTo(userID)
Этот код берет все дочерние узлы непосредственно под cartList
и упорядочивает их по их userID
свойству. Но userID
на вашем скриншоте нет свойства, поэтому в результате получается пустой список.
Я полагаю, что ключом каждого узла cartList
является идентификатор пользователя, и в этом случае вы можете вместо этого использовать:
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();
Комментарии:
1. Я пытался, но у меня
RecyclerView
все еще ничего нет,adapter
размер равен 0, сэр.2. Это неожиданно. Можете ли вы отредактировать свой вопрос, чтобы показать обновленный код?
3. Я попытался добавить
userID
в таблицу иorderByChild(userID)
забыл обновить. Извините, сэр
Ответ №2:
Я наконец понял это. По какой RecyclerView
CartActivity
-то причине мне нужно время для загрузки данных (возможно, потому, что у меня включено 3 RecyclerView
HomeActivity
, и иногда отображаются данные, а иногда и нет, обычно 1 или 2/3 RecyclerViews показывают данные). Когда я перезагружаюсь (нажимаю назад и снова запускаю действие), появится RecyclerView и отобразит данные.