android - 如何显示存储在 firestore 中的数组

android - how do you display an array that is stored in firestore

我正在尝试显示存储在我的 Firestore 中的数组以显示在 RecyclerView 中。

我收到的错误是这样的:

java.lang.RuntimeException: Could not deserialize object. Failed to convert value of type java.util.ArrayList to String

至于我的代码,这里是:

型号

public class ViewOrderModel implements Serializable {

    String userName;
    String phoneNumber;
    String currentTime;
    String address;
    long totalPrice;
    String itemList;
    String documentID;
    String productName;
    int totalQuantity;

适配器


    @Override
    public void onBindViewHolder(@NonNull ViewOrderAdapter.ViewHolder holder, int position) {

        holder.userName.setText(viewOrderModelList.get(position).getUserName());
        holder.date.setText(viewOrderModelList.get(position).getCurrentTime());
        holder.totalPrice.setText(String.valueOf(viewOrderModelList.get(position).getTotalPrice()));
        holder.address.setText(viewOrderModelList.get(position).getAddress());
        holder.phone.setText(viewOrderModelList.get(position).getPhoneNumber());

        ViewOrderModel viewOrderModel = viewOrderModelList.get(position);
        holder.productName.setText(viewOrderModel.getProductName());
        holder.quantity.setText(viewOrderModel.getTotalQuantity());

    }

activity

    order_rec = findViewById(R.id.admin_view_order_rec);
        order_rec.setLayoutManager(new LinearLayoutManager(this,RecyclerView.VERTICAL,false));
        viewOrderModelList = new ArrayList<>();
        viewOrderAdapter = new ViewOrderAdapter(this,viewOrderModelList);
        order_rec.setAdapter(viewOrderAdapter);
        firestore.collection("UserOrder")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()){
                            for (QueryDocumentSnapshot documentSnapshot : task.getResult()){
                                ViewOrderModel viewOrderModel = documentSnapshot.toObject(ViewOrderModel.class);
                                viewOrderModelList.add(viewOrderModel);
                                viewOrderAdapter.notifyDataSetChanged();
                            }
                        }
                    }
                });

如果需要,这是我的数据库

您收到以下错误:

java.lang.RuntimeException: Could not deserialize object. Failed to convert value of type java.util.ArrayList to String

因为您正在尝试将 属性 类型的数组作为字符串读取,这在 Java 中是不可能的。要解决此问题,您必须将 ViewOrderModel class 中的 itemList 类型更改为列表。所以请更改:

String itemList;

进入:

List<Product> itemList;

只有当您有一个 class 并且最小声明如下所示时,这才会起作用:

class Product {
    String documentID, productName;
    int productPrice, totalPrice, totalQuantity;
}