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;
}
我正在尝试显示存储在我的 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;
}