无法获取哈希映射值作为 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?
我有一个名为 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?