Kotlin Firestore-从特定文档中获取字段

时间:2020-10-25 12:39:12

标签: android kotlin google-cloud-firestore

我有多个用于存储各种文档的集合,并且我正尝试到达特定的集合,以便可以从特定的文档中检索字段。我正在尝试在onStart

中执行此操作
John Doe ----> "DocumentId (a23bsz12bvxaQw2)" ----> |name: John Doe, age: 23, occupation: teacher|

我能够通过另一种方法检索特定的集合,但这仅是因为我能够将集合的名称作为参数传递。对于我来说,到达特定收藏集的唯一方法是对fieldPath进行硬编码。

到目前为止,这是我的代码:

 override fun onStart() {
    super.onStart()

    val caseManagerNameOnStart = caseManagerName?.text

    val notebookRef = db.collection("$caseManagerNameOnStart")
    notebookRef.addSnapshotListener(this, object : EventListener<QuerySnapshot?> {
        override fun onEvent(querySnap: QuerySnapshot?, ex: FirebaseFirestoreException?) {
            if (ex != null) {
                return
            }
            if (querySnap != null) {
                for (documentSnapshot in querySnap) {
                    val appointment = documentSnapshot.toObject(
                        Appointment::class.java
                    )
                    appointment.setId(documentSnapshot.id)
                    appointment_text_view_date.text =
                        "Date: " + documentSnapshot["dateAppointment"].toString()
                    appointment_text_view_time.text =
                        "Time: " + documentSnapshot["timeAppointment"].toString()
                    appointment_text_view_case_manager.text =
                        "Case Manager: " + documentSnapshot["caseManagerName"].toString()
                    appointment_text_view_client_name.text =
                        "Client: " + documentSnapshot["userName"].toString()
                    appointment_text_view_format.text =
                        "Format: " + documentSnapshot["formatAppointment"].toString()
                }
            }
        }
    })
}

val caseManagerNameOnStart = caseManagerName?.text似乎是空的,当我调用有问题的活动时,应用程序崩溃了。 caseManagerName应该具有可用于fieldPath的名称,但是在某些情况下,可能没有要检索的集合,因此不应为TextView设置任何内容。

我的预期输出是这样:

  1. 获取指定的收藏集
  2. 从文档中检索字段
  3. 在给定的TextViews中显示这些字段
  4. 如果没有可用的集合,请阻止onStart使应用程序崩溃。

这是我在Firestore中的数据的图像。 Firestore Data

非常感谢您的投入。谢谢您的时间。

1 个答案:

答案 0 :(得分:0)

但这只是因为我能够将集合名称作为参数传递。

为了访问文档的属性,必须知道集合的名称。

val caseManagerNameOnStart = caseManagerName?.text似乎为空,并且应用程序崩溃了

它是空的,这是您崩溃的原因。

caseManagerName应该包含可用于fieldPath的名称

或者您可以将集合的名称保存在其他类型的对象中,例如,在SharedPreferences中。

但是,在某些情况下,可能没有要检索的集合,因此不应为TextViews设置任何内容。

这是在引用中设置内容之前检查集合是否存在的方法。