Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 无法获取作为ArrayList的哈希映射值_Firebase_Kotlin_Arraylist_Google Cloud Firestore_Hashmap - Fatal编程技术网

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

Firebase 无法获取作为ArrayList的哈希映射值,firebase,kotlin,arraylist,google-cloud-firestore,hashmap,Firebase,Kotlin,Arraylist,Google Cloud Firestore,Hashmap,我有一个名为Product的数据类,它的对象存储在ArrayList中 然后我创建了一个hashmapval prodensitmap:hashmap您将得到以下错误: java.lang.ClassCastException:java.util.HashMap无法转换为com.example.grocerystore.models.Product 因为您试图循环遍历包含“HashMap”对象而不是“Product”对象的ArrayList。由于这些类之间没有继承关系,所以实际上不可能进行强制转

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


然后我创建了一个hashmap
val prodensitmap:hashmap您将得到以下错误:

java.lang.ClassCastException:java.util.HashMap无法转换为com.example.grocerystore.models.Product

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

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


我不知道Firebase,但了解您如何“将数据上载到Firebase firestore”可能会有所帮助  您是否尝试过记录/打印检索到的对象(即您的successListener的
it
)?我无法访问上载的数据,我需要一个单独的方法来获取我在问题中正在执行的数据。但是我可以访问hashmap并在本地获取arraylist请编辑您的问题并将您的数据库结构添加为屏幕截图。也请用@回复。@AlexMamo我已经添加了,您能添加另一个屏幕截图,让我们可以看到文档的开头吗?它正在工作,但我有一个疑问,我已将数据作为
HashMap
放入firebase firestore,那么为什么我无法从HashMap中获取
ArrayList
,在我从firebase firestore获取数据后,当您将数据添加到firestore时,应将其添加为
HashMap
,这意味着该值可以是任何对象。因此,当您尝试将HashMap强制转换为
HashMap
时,您会收到该警告。这是因为当时没有足够的信息来知道该值是列表还是任何其他对象,因此发出警告。Firestore SDK对于几乎所有数据类型都有不同的风格,但对于列表则没有。这就是为什么你应该从那篇文章中找到解决方案。我后来把它作为
HashMap
放到firebase 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
                }
            }
    }
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