【发布时间】:2021-07-06 18:22:51
【问题描述】:
我正在使用以下代码从Firestore 获取一组数据,这是一组邮政编码(从名为“用户”的集合中检索)。然后,我想从另一个集合(称为“订单”)中获取与数组中的任何邮政编码匹配的数据,以及与待处理、打包、处理中匹配的“订单状态”。
fun getZipCodesFromFirebase(fragment: OrdersByStatusFragment) {
val uid = FirebaseAuth.getInstance().currentUser!!.uid
val rootRef = FirebaseFirestore.getInstance()
val followingRef = rootRef.collection("users")
val uidRef = followingRef.document(uid)
uidRef.get().addOnCompleteListener { task ->
if (task.isSuccessful) {
val document = task.result
if (document.exists()) {
val zipCodes = document.toObject(User::class.java)?.zip_codes
Log.d("Zip Codes", zipCodes.toString())
getOrderStatusList(fragment, zipCodes)
} else {
Log.d("TAG", "No such document")
}
} else {
Log.d("TAG", "get failed with ", task.exception)
}
}
}
然后我尝试使用以下代码来获取具有上述订单状态的订单以及与任何邮政编码匹配的订单。但我无法正确理解。
fun getOrderStatusList(fragment: OrdersByStatusFragment, zipList: List<String>?) {
mFireStore.collection("orders")
.whereEqualTo("address.zipCode", zipList?.get(0))
.whereEqualTo("address.zipCode", zipList?.get(1))
.whereEqualTo("address.zipCode", zipList?.get(2))
.whereEqualTo("address.zipCode", zipList?.get(3))
.whereEqualTo("address.zipCode", zipList?.get(4))
.whereEqualTo("address.zipCode", zipList?.get(5))
.whereEqualTo("address.zipCode", zipList?.get(6))
.whereEqualTo("address.zipCode", zipList?.get(7))
.whereEqualTo("address.zipCode", zipList?.get(8))
.whereEqualTo("address.zipCode", zipList?.get(9))
.get()
.addOnSuccessListener { document ->
val list: ArrayList<OrderStatus> = ArrayList()
for (i in document.documents) {
val orderStatus = i.toObject(OrderStatus::class.java)!!
orderStatus.id = i.id
if (orderStatus.order_status == "Pending" || orderStatus.order_status == "Packed" || orderStatus.order_status == "In Process"
|| orderStatus.order_status == "Order Received") {
list.add(orderStatus)
}
}
Log.d("Zip Code", list.toString())
fragment.successOrderStatusList(list)
}
.addOnFailureListener {
fragment.hideProgressDialog()
}
}
简而言之,我想要与邮政编码和订单状态匹配的订单。其中 Zip codes 是从另一个名为 users 的数组中检索到的,并且订单状态是硬编码的。
数据库结构如下图所示。
使用字段“zip_codes”收集“用户”。
包含字段“order_status”和“zip_codes”的集合“订单”
我希望我的问题足够清楚。
谢谢。
编辑:>>最新的工作代码。
fun getOrderStatusList(fragment: OrdersByStatusFragment, zipList: List<String>?) {
mFireStore.collection("orders")
.whereIn("address.zipCode", zipList!!)
.get()
.addOnSuccessListener { document ->
val list: ArrayList<OrderStatus> = ArrayList()
for (i in document.documents) {
val orderStatus = i.toObject(OrderStatus::class.java)!!
orderStatus.id = i.id
if (orderStatus.order_status == "Pending" || orderStatus.order_status == "Packed" || orderStatus.order_status == "In Process"
|| orderStatus.order_status == "Order Received"
) {
list.add(orderStatus)
}
}
Log.d("Zip Code", list.toString())
fragment.successOrderStatusList(list)
}
.addOnFailureListener {
fragment.hideProgressDialog()
}
}
【问题讨论】:
标签: kotlin google-cloud-firestore