我有多个用于存储各种文档的集合,并且我正尝试到达特定的集合,以便可以从特定的文档中检索字段。我正在尝试在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设置任何内容。
我的预期输出是这样:
onStart
使应用程序崩溃。这是我在Firestore中的数据的图像。 Firestore Data
非常感谢您的投入。谢谢您的时间。
答案 0 :(得分:0)
但这只是因为我能够将集合名称作为参数传递。
为了访问文档的属性,必须知道集合的名称。
val caseManagerNameOnStart = caseManagerName?.text似乎为空,并且应用程序崩溃了
它是空的,这是您崩溃的原因。
caseManagerName应该包含可用于fieldPath的名称
或者您可以将集合的名称保存在其他类型的对象中,例如,在SharedPreferences中。
但是,在某些情况下,可能没有要检索的集合,因此不应为TextViews设置任何内容。
这是在引用中设置内容之前检查集合是否存在的方法。