首页 > 解决方案 > 如何使用 Android Studio/Kotlin 访问 FirebaseFirestore 中的数组字段?

问题描述

我的 Cloud Firestore 数据库中有一组对象,称为 Experience。每个体验都有一个usernamedate等,体验列表中可以有多个体验。如何访问我的体验数组的特定字段?我知道在 Dart 中,我可以输入如下内容:

querySnapshot.documents[i].data["Experience"][number of array item]["username"] 

但是我怎样才能在 Kotlin 中做同样的事情呢?

标签: androidarrayskotlingoogle-cloud-firestore

解决方案


当您将一组自定义(体验)对象添加到 Cloud Firestore 数据库中时,它将作为列表添加到数据库中。如果您的数据库看起来类似于:

Firestore-root
   |
   --- myCollection (collection)
          |
          --- myDocument (document)
                |
                --- experiences (array)
                       |
                       --- 0 (Experience object)
                       |   |
                       |   --- username: "UserName"
                       |   |
                       |   --- date: May 25, 2019 at 12:12:12 PM UTC+3
                       |
                       --- 1 (Experience object)
                           |
                           --- username: "AnotherUserName"
                           |
                           --- date: May 24, 2019 at 13:13:13 PM UTC+3

请注意,目前无法通过简单地从experiences属性中获取数据来获取自定义(体验)对象的列表。使用时:

List<Object> list = (List<Object>) document.get("experiences");
Object item = list.get(yourIndex);

item对象实际上是一个而HashMap不是一个Experience对象。以上几行代码我是用Java写的,这样可以更清楚的看到返回类型。所以像下面这样的一行:

val experience: Experience = (list[yourIndex] as Experience).username

不管用。如果您尝试将其HashMap转换为Experience对象,您将收到如下所示的错误:

java.lang.ClassCastException:java.util.HashMap 无法转换为 com.example.Experience

所以要解决这个问题,您必须编写自己的代码,这可以帮助您将HashMap对象转换为Experience对象。此外,如果您需要 a List<Experience>,您还需要将List<HashMap>对象转换为List<Experience>对象。


推荐阅读