gpt4 book ai didi

java - Android Firestore 复合查询

转载 作者:行者123 更新时间:2023-12-04 07:52:27 25 4
gpt4 key购买 nike

我正在 Android Studio 中开发汽车租赁 android 应用程序。我正在研究“过滤器”选项,因此用户可以过滤可用的汽车(例如,他们可以选择仅查看 5 个座位​​的柴油车,或者他们可以选择仅查看全轮驱动汽车等)。我有一个名为 FilterCars 的 Activity ,例如,用户可以通过 4 个组件进行过滤:燃料、牵引力、座椅、变速箱。在他们提交过滤器后,汽车会根据他们的喜好显示。我将这些过滤器传递给 Cars Activity (其中汽车显示在 RecyclerView 中)并成功 bundle 附加功能,因此我在 Cars.java 中将成功用户的过滤器存储在变量“fuelType、tractionType、seatType、gearboxType”中。
使用这些过滤器,我可以向 recyclerview 适配器传递如下查询:FirebaseFirestore.getInstance().collection("Cars").whereEqualTo("fuel", fuelType).whereEqualTo("traction", tractionType).whereEqualTo("seats", seatsType).whereEqualTo("gearbox", gearboxType)这工作得很好。
我的问题如下:我不想强制用户完成所有过滤字段,例如,如果他们只想按燃料和座位过滤,他们可以这样做。如何进行仅包含用户选择的过滤器的复合查询?我想过但我无法解决的一种方法是,例如,如果用户不想按牵引力过滤,在tractionType 中存储类似“”(空)的内容,并在复合查询中而不是tractionType查询“whereEqualTo”以放置返回所有汽车的内容,因此复合查询将仅按所选过滤器进行过滤。
关于如何做到这一点的任何建议?或者有没有更好的方法可以避免将空答案放入复合查询中?
谢谢!

最佳答案

以下查询:

FirebaseFirestore.getInstance().collection("Cars")
.whereEqualTo("fuel", fuelType)
.whereEqualTo("traction", tractionType)
.whereEqualTo("seats", seatsType)
.whereEqualTo("gearbox", gearboxType);
将通过四个属性的值过滤您的集合“汽车”。

I don't want to force the users to complete all the filter fields, so for example if they want to filter only by fuel and seats


有两种方法可以解决此问题。以上面的查询为例,您可以删除对“.whereEqualTo(“traction”,tractionType)”和“.whereEqualTo(“gearbox”, gearboxType)”的调用,您将获得所需的结果。或者,您可以执行以下操作,因为在我看来它更有意义。
当用户第一次打开应用程序时,只需显示“汽车”集合中存在的所有可用汽车:
Query query = FirebaseFirestore.getInstance().collection("Cars")
如果太多,添加一个 limit() 调用,或者实现分页。然后只需添加选择汽车过滤器的可能性。例如,为每个过滤选项添加 4 个复选框。选择一个选项后,将其添加到您的 Query 对象中,如下所示:
query = query.whereEqualTo("fuel", fuelType)
如果用户选择所有选项,则查询将类似于第一个。
另请记住,Firestore 查询是不可变的。有关更多信息,请查看我在以下帖子中的回答:
  • FireStore date query not working as expected

  • 例如,如果正在使用 Android 的 Firebase-UI 库,请不要忘记在设置新查询后开始/停止监听。如果您不使用该库,请不要忘记将更改通知适配器。

    关于java - Android Firestore 复合查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66888002/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com