【发布时间】:2021-02-23 10:21:31
【问题描述】:
我创建了一个 recyclerView,我想从 firebase 检索数据并将其显示在 recyclerview 中。我创建了两个模型。
检查图片以获取 Firebase
包含 id、price、productId、productName 和数量的订单来自另一个列表。
例如,我想在 orderDetails 中设置 setText productName
我不能采取同样的方式,因为是另一个列表
我使用正确的地址、日期时间名称和付款方式。但是当我使用 productName 时为 null
我的请求模型是:
public class Request {
private String name;
private String address;
private String total;
private String datetime;
private String paymentMethod;
private List<CoffeeOrder> order;
public Request() {
}
public Request(String name, String address, String total, String datetime, String paymentMethod, List<CoffeeOrder> order) {
this.name = name;
this.address = address;
this.total = total;
this.datetime = datetime;
this.paymentMethod = paymentMethod;
this.order = order;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTotal() {
return total;
}
public void setTotal(String total) {
this.total = total;
}
public String getDatetime() {
return datetime;
}
public void setDatetime(String datetime) {
this.datetime = datetime;
}
public String getPaymentMethod() {
return paymentMethod;
}
public void setPaymentMethod(String paymentMethod) {
this.paymentMethod = paymentMethod;
}
public List<CoffeeOrder> getOrder() {
return order;
}
public void setOrder(List<CoffeeOrder> order) {
this.order = order;
}
}
我的 CoffeeOrder 模型是:
public class CoffeeOrder {
private int ID;
private String ProductId;
private String ProductName;
private String Quantity;
private String Price;
public CoffeeOrder() {
}
public CoffeeOrder(int ID, String productId, String productName, String quantity, String price) {
this.ID = ID;
ProductId = productId;
ProductName = productName;
Quantity = quantity;
Price = price;
}
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
public String getProductId() {
return ProductId;
}
public void setProductId(String productId) {
ProductId = productId;
}
public String getProductName() {
return ProductName;
}
public void setProductName(String productName) {
ProductName = productName;
}
public String getQuantity() {
return Quantity;
}
public void setQuantity(String quantity) {
Quantity = quantity;
}
public String getPrice() {
return Price;
}
public void setPrice(String price) {
Price = price;
}
}
我的适配器是:
public class UserOrderAdapter extends RecyclerView.Adapter<UserOrderAdapter.UserOrderViewHolder> {
ArrayList<Request> myList;
Context context;
List<CoffeeOrder> coffeeList;
public UserOrderAdapter(Context context, ArrayList<Request> myList,List<CoffeeOrder> coffeeList) {
this.myList = myList;
this.context = context;
this.coffeeList = coffeeList;
}
@NonNull
@Override
public UserOrderViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(context).inflate(R.layout.order_item, parent, false);
return new UserOrderViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull UserOrderViewHolder holder, int position) {
Request request = myList.get(position);
holder.usernameText.setText(request.getName());
holder.orderTotalPrice.setText(request.getTotal());
holder.orderDate.setText(request.getDatetime());
holder.paymentMethod.setText(request.getPaymentMethod());
for(CoffeeOrder item:coffeeList) {
holder.orderDetails.setText(item.getProductName());
}
}
@Override
public int getItemCount() {
return myList.size();
}
public static class UserOrderViewHolder extends RecyclerView.ViewHolder {
TextView usernameText, orderTotalPrice, orderDate, paymentMethod, orderDetails;
public UserOrderViewHolder(View itemView) {
super(itemView);
usernameText = (itemView).findViewById(R.id.username_text);
orderTotalPrice = (itemView).findViewById(R.id.order_total_price);
orderDate = (itemView).findViewById(R.id.order_date);
paymentMethod = (itemView).findViewById(R.id.payment_method);
orderDetails = (itemView).findViewById(R.id.order_details);
}
}
}
我的活动是:
public class UserOrderActivity extends AppCompatActivity {
RecyclerView recyclerOrders;
private FirebaseDatabase db = FirebaseDatabase.getInstance();
private DatabaseReference ref = db.getReference().child("Requests");
private UserOrderAdapter adapter;
private ArrayList<Request> list;
private List<CoffeeOrder> coffeeList;
Toolbar toolbar;
TextView userOrderBlankText;
GifImageView gifImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_order);
toolbar = findViewById(R.id.toolbar);
gifImageView = findViewById(R.id.order_giffy);
userOrderBlankText = findViewById(R.id.user_order_blank_text);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
recyclerOrders = findViewById(R.id.recycler_orders);
recyclerOrders.setHasFixedSize(true);
recyclerOrders.setLayoutManager(new LinearLayoutManager(this));
list = new ArrayList<>();
coffeeList = new ArrayList<>();
adapter = new UserOrderAdapter(UserOrderActivity.this, list,coffeeList);
recyclerOrders.setAdapter(adapter);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot dataSnapshot : snapshot.getChildren()){
Request request = dataSnapshot.getValue(Request.class);
list.add(request);
}
adapter.notifyDataSetChanged();
if (list.size() == 0) {
gifImageView.setVisibility(GifImageView.VISIBLE);
userOrderBlankText.setVisibility(View.VISIBLE);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
【问题讨论】:
-
您正在将列表分配给适配器,而它仍然为空
-
@kgori_dev 我该如何工作?
-
检查答案部分,我回答了
-
@kgori_dev 以及如何在适配器中获取产品名称?
-
这段代码中到底有什么不符合您的预期?请回复@AlexMamo
标签: android firebase firebase-realtime-database android-recyclerview