android - 如何使用 Android Studio/Kotlin 访问 FirebaseFirestore 中的数组字段?
问题描述
我的 Cloud Firestore 数据库中有一组对象,称为 Experience。每个体验都有一个username
、date
等,体验列表中可以有多个体验。如何访问我的体验数组的特定字段?我知道在 Dart 中,我可以输入如下内容:
querySnapshot.documents[i].data["Experience"][number of array item]["username"]
但是我怎样才能在 Kotlin 中做同样的事情呢?
解决方案
当您将一组自定义(体验)对象添加到 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>
对象。
推荐阅读
- c++ - 是否可以让 Bitset 将位打印到单行?
- ios - 以编程方式创建时未显示导航控制器
- ios - IOS 开发 - 从 safari 中的 webview 打开 url 链接,而不是当前的 webview
- php - PHP语言中的多循环
- java - spring Cloud Hystrix:后备方法不起作用
- push-notification - 任何适用于独立 Apple Watch 应用程序的推送通知服务?
- ios - 使用解码协议解析 Json(可编码)
- python - QChart 添加轴不显示,当悬停信息不正确时?
- reactjs - 无法创建新项目..遇到错误
- ios - Xcode 11:如何垂直堆叠编辑器?