我无法从Firestore检索哈希映射值。上传值没有问题,但是检索它们很困难。
这是我的构造函数:
public class OrderItems {
private String uid;
private String product;
private int qty;
private int price;
private int totalPrice;
public OrderItems(){
}
public OrderItems(String uid, String product, int qty, int price) {
this.uid = uid;
this.product = product;
this.qty = qty;
this.price = price;
}
public String getUid() {
return uid;
}
public String getProduct() {
return product;
}
public int getQty() {
return qty;
}
public int getPrice() {
return price;
}
public int getTotalPrice() {
return qty * price;
}
public void setTotalPrice(int totalPrice) {
this.totalPrice = totalPrice;
}
}
我的哈希映射构造函数:
public class OrderObject {
private HashMap<String, OrderItems> orders;
public OrderObject(){
}
public OrderObject(HashMap<String, OrderItems> orders) {
this.orders = orders;
}
public HashMap<String, OrderItems> getOrders() {
return orders;
}
}
如何使用构造函数通过数组列表存储对象?然后我该如何访问各个字段?谢谢!
答案 0 :(得分:3)
您需要将DocumentSnapshot投射到HashMap
db.collection("Deliveries").document("your_document_id").get()
.addOnSuccessListener {
val obj = it.get("Coconut") as HashMap<*, *>
Log.d("TAG", it.get("Coconut").toString())
// This will print the whole map value
Log.d("TAG", obj.get("qty").toString())
}.addOnFailureListener {}
答案 1 :(得分:1)
您似乎在单个文档中存储了OrderItems
个对象。如果在特定对象上附加了侦听器,则返回的对象的类型为DocumentSnapshot:
DocumentSnapshot包含从Firestore数据库中的文档读取的数据。可以使用getData()或get()方法提取数据。
如果打算使用getData(),将返回Map
对象,因此您可以简单地对其进行迭代并获取所需的数据。但是请记住,您无法直接获取OrderItems
对象的列表,需要为此编写代码。
我不确定您要实现什么目标,但是对于您而言,更合适的解决方案是将这些项目作为单独的文档存储在集合中。这样,您可以获取订单集中的所有文档(OrderItems对象),并将其显示在RecyclerView
中,如以下帖子中我的回答所述: