kotlin - 如何在循环中从 Firestore 查询中获取单个文档
问题描述
在我的应用程序for
中,我在 Firestore 查询中运行一个循环。此查询本身旨在仅返回满足品牌和位置标准(字符串值)并且"deal_number"
位于文档中的计数器()大于用户集合中的比较计数器()的文档Login.deal_number
。
所以本质上,我在用户集合中搜索最后一个计数器编号,并将其用作对交易 ID 中的计数器的逻辑检查
menuref = FirebaseFirestore.getInstance()
menuref.collection("Users").whereEqualTo("uid", userid)
.addSnapshotListener { value, task ->
if (task != null) {
return@addSnapshotListener
}
for (document in value!!) {
val seller_brand = document.getString("brand")!!
val seller_location = document.getString("location")!!
val deal_num = document.getLong("last_deal_num")!!
//Login.deal_number is a companion object
Login.deal_number = deal_num
Log.d("Firestore_brand", seller_brand)
Log.d("Firestore_location", seller_location)
Log.d("lastdealnum", "${Login.deal_number}")
menuref.collection("Car_Deals").whereEqualTo("brand", seller_brand).whereEqualTo(seller_location, "True").whereGreaterThan("deal_number",Login.deal_number)
.addSnapshotListener { value, task ->
if (task != null) {
return@addSnapshotListener
}
counter_deal = 0
for (document in value!!) {
val new_deal_num = document.getLong("deal_number")!!
Log.d("dealnumnew", "$new_deal_num")
if (new_deal_num == Login.deal_number) {
counter_deal = counter_deal + 1
break
} else if (new_deal_num < Login.deal_number) {
counter_deal = counter_deal + 1
break
}
else if (new_deal_num > Login.deal_number && counter_deal < 1) {
Log.d("Tag_counter_deal","${counter_deal}")
Log.d("Tag_newdeal_num","${new_deal_num}")
Log.d("Tag_userdeal_num","${Login.deal_number}")
counter_deal = counter_deal + 1
newdealnumref =
FirebaseFirestore.getInstance().collection("Users")
newdealnumref.document(userid)
.update("last_deal_num", new_deal_num)
.addOnSuccessListener {
}.addOnFailureListener { e ->
Log.w(
"firestore_create_error",
"Error writing to document",
e
)
}
Log.d("newdealbrand", "$seller_brand $seller_location")
Log.d("newdeal", "New deal found")
dealCreatedNotificationChannel() // this is the android O channel creation
CodetoRunforNotification() // this is the code to run for the notification. generic, havent changed anything according to normal notification creation
with(NotificationManagerCompat.from(this)) {
notify(notify_counter, builder)
notify_counter++
}
counter_deal = 0
break
}
}
}
}
}
对于上述情况,为什么 Firestore 在应该只有一个事件时会创建多个通知,是因为过滤器似乎没有正确应用的方式。是否由于与 recyclerview/listview 相同的效果,您需要清除数组以防止符合标准的重复项?
这似乎是基于 Firestore 查询运行通知的常见趋势。这甚至可能吗?我在 for 循环中尝试了各种中断,但在同一个文档上不断获得多次点击。counter_deal
一旦没有运气触发快照,我尝试使用来限制发送的通知数量。
解决方案
推荐阅读
- python-3.x - 从 docker 访问 google drive api
- azure-devops - Azure devops - 准备自托管测试代理
- html - 如何将 p 标签与单选按钮对齐
- pandas - Creating another column condition on dates in the index
- html - 并排视差图像,同时保持纵横比
- version - 将 pine 脚本版本 2 代码转换为版本 4
- swift - 动画 UIView 总是在左上角,即使中心在其他地方
- raspberry-pi - 覆盆子如何在不知道纬度/经度的情况下找到其本地时区
- php - 在主题中加载特定的 WooCommerce 模板
- bash - 将代码拆分为文件