无法获取哈希映射值作为 ArrayList

Cannot get hash map value as ArrayList

我有一个名为 Product 的数据 class,它的对象存储在 ArrayList 中。

然后我正在创建一个 hashmap val prodInCartMap: HashMap<String, ArrayList<Product> = HashMap()

我正在将数组列表添加到散列映射 prodInCartMap["prodInCart"] = list,其中列表是 val list: ArrayList<Product> = ArrayList()

然后我正在将数据上传到 Cloud Firestore。

当我获取数据时,这是代码:

fun getHashMapActivity(uid: String, activity: CartActivity){
        FirebaseFirestore.getInstance().collection(Constants.CART_COLLECTION)
            .document(uid)
            .get()
            .addOnSuccessListener {
                val map: HashMap<String, Any> = it.data as HashMap<String, ArrayList<Product>>
                val temp = map["prodInCart"] as ArrayList<Product>
                for (i in temp.indices){
                     val product: Product = temp[i] as Product
                }
            }
    }

执行 for 循环时出现此错误:

java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.grocerystore.models.Product

为什么转成ArrayList还是hash map?

这是我的数据库的截图:

每当我将鼠标悬停在:val cart: HashMap<String, ArrayList<Product>> = it.data as HashMap<String, ArrayList<Product>>

我收到此警告:

Unchecked cast: (Mutable)Map<String!, Any!>? to kotlin.collections.HashMap<String, ArrayList /* = ArrayList /> / = java.util.HashMap<String, ArrayList> */

我的产品class:

data class Product(
        var prod_name: String = "",
        var prod_image: Int = -1,
        var prod_desc: String = "",
        var prod_price: Int = -1,
        var prod_tags: ArrayList<String> = ArrayList(),
        var kgOrPack: Boolean = true //true: pack, false: kg
): Serializable

您收到以下错误:

java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.grocerystore.models.Product

因为您试图遍历包含“HashMap”对象而不是“Product”对象的 ArrayList。由于这些 类 之间没有继承关系,因此实际上无法进行转换,因此出错。有两种方法可以解决这个问题。

困难的方法是迭代 HashMap 对象并自己创建“Product”对象,或者,简单的方法是将 Product 对象数组映射到 List,如下文所述:

How to map an array of objects from Cloud Firestore to a List of objects?