当前位置: 首页 > 知识库问答 >
问题:

使用kotlin从Firebase Firestore字段检索自定义对象

上官淮晨
2023-03-14

我试图从Firebase Firestore中检索一个字段,并将其放入一个自定义对象中。我成功地从代码上传了自定义对象,没有任何问题,但是当我试图从Firestore读取和访问对象列表时,我一直得到以下错误:

java.lang.ClassCastException:java.util.HashMap不能强制转换为SelfMade问题

SelfMadeQuestion类如下所示:

class SelfMadeQuestion(
    var openQuestion: Boolean = false,
    var questionText: String = "",
    var answers: List<String>? = mutableListOf(),
    var rightAnswer: String? = ""
) {}

这就是我试图做的,以便从Firebase中读取自拍问题列表:

 fStore.collection("users").get().addOnSuccessListener { documents ->
                /**
                 * start loading data
                 * */

                for (it in documents) {
               
                 val questions = it.get("selfMadeQuestions") as 
                                 MutableList<SelfMadeQuestion>?

                                       }

由于可以将自定义对象上载到firebase并且工作正常,我想知道是否有任何方法可以将字段作为对象读取?

共有1个答案

方绪
2023-03-14

请注意,文档快照#get(字符串字段)方法返回一个对象类型为 Object。由于自订问题字段由成对的键和值组成,因此返回的对象类型是哈希映射

因此,您会收到以下错误:

java.lang.ClassCastException:java.util.HashMap无法强制转换为SelfMade问题

因为您正在尝试将HashMap转换为SelfMadeRequest类型的对象,这在静态编程语言中实际上是不可能的。

我能想到的最简单的解决方案是创建另一个包含 List 的类。

class SelfMadeQuestions(
    var selfMadeQuestions: List<SelfMadeQuestion> = mutableListOf()
)

然后您可以简单地将该数组映射到列表中

fStore.collection("users").get().addOnSuccessListener  { documents ->
    for (doc in documents) {
        if (doc.get("selfMadeQuestions") != null) {
            val questions = doc.toObject(SelfMadeQuestions::class.java).questions
            Log.d(TAG, questions.size.toString())
        }
    }
}

logcat中的结果将是每个列表的大小。为了更好地理解它,我还建议您阅读以下文章:

  • 如何将云火库中的对象数组映射到对象列表?

 类似资料:
  • 在WooCommerce结账页面上,我添加了一个客户必须输入才能结账的额外字段。 我想在woocommerce\u cart\u calculate\u fees操作挂钩中访问此字段的值。 通过使用woocommerce,我尝试了几种方法-

  • 我在修改我安装的WordPress流行帖子插件时遇到了一些问题。 它可以选择从自定义字段获取缩略图,我已将其输入为“image_facebook”。但是缩略图没有显示。 在检查代码时,我发现imgsrc有post id而不是返回图像URL。 我已经把问题缩小到我安装的另一个插件http://wordpress.org/plugins/advanced-custom-fields/ 当它处于活动状态

  • 我是新来的,我用控制面板创建了一个页面自定义字段 然而,这个api给我带来了一个错误:java。lang.NullPointerException。我认为这个错误是由于对自定义字段的许可而发生的。所以,我勾选了查看和更新来宾权限。但问题依然存在。 我的问题是什么触发了这个错误,如何修复它,还有其他解决方案可以用来从页面自定义字段中检索值吗? 提前谢谢。 编辑 我在为api分配属性时存在误解,下面是

  • 问题内容: 我在Playground中使用Swift 3,Xcode 8.0拥有此功能: 创建人员数组 编码数组 保存到用户默认值 检查 从userDefaults返回 只需检查存档的数据 我无法正确将数据对象保存到userDefaults,此外,底部的检查还会产生错误“严重错误:在展开可选值时意外发现nil”。“检查”行还显示已保存的对象为nil。这是我对象的NSCoder中的错误吗? 问题答案

  • 我有一个前端ACF表单-ACF_表单()。使用post对象字段。我想通过自定义字段限制查询结果。下面的代码可以正常工作,除了当我尝试在搜索栏中键入时,会出现以下错误:我得到的错误是ajax响应中的PHP错误; 0:“PhpConsole\Handler”- 1:"strpos()" 2:"acf_order_by_search()" 3:“acf_field_post_object- 4:“acf

  • WooCommerce后台的产品检索与前台搜索略有不同。前台是在WordPress默认搜索的基础上修改,后台直接用了一套自己的逻辑,从wc_product_meta_lookup这个表里检索产品,调用函数WC_Product_Data_Store_CPT->search_products(),这个函数只有一个filter——woocommerce_product_pre_search_produc