【问题标题】:Android Firestore compound queryAndroid Firestore 复合查询
【发布时间】:2021-03-31 12:35:16
【问题描述】:

我正在 Android Studio 中开发汽车租赁 Android 应用程序。我正在研究“过滤器”选项,因此用户可以过滤可用的汽车(例如,他们可以选择仅查看 5 个座位​​的柴油车,或者他们可以选择仅查看全轮驱动汽车等)。我有一个名为 FilterCars 的活动,例如,用户可以按 4 个组件进行过滤:燃料、牵引力、座椅、变速箱。在他们提交过滤器后,将根据他们的偏好显示汽车。我将这些过滤器传递给 Cars 活动(其中汽车显示在 RecyclerView 中),捆绑附加功能成功,因此我在 Cars.java 中将成功用户的过滤器存储在变量“fuelType、tractionType、seatType、gearingType”中。

使用这些过滤器,我可以向 recyclerview 适配器传递如下查询:

FirebaseFirestore.getInstance().collection("Cars").whereEqualTo("fuel", fuelType).whereEqualTo("traction", tractionType).whereEqualTo("seats", seatsType).whereEqualTo("gearbox", gearboxType)

效果很好。

我的问题如下:我不想强迫用户填写所有的过滤字段,例如,如果他们只想按燃料和座位进行过滤,他们可以做到。如何进行仅包含用户选择的过滤器的复合查询?我考虑过但无法解决的一种方法是,例如,如果用户不想按牵引力进行过滤,将诸如“”(空)之类的 tractionType 存储在复合查询中而不是 tractionType查询“whereEqualTo”以放置返回所有汽车的内容,因此复合查询将仅按所选过滤器进行过滤。

有什么建议吗?或者有没有更好的方法可以避免将空答案放在复合查询中?

谢谢!

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    以下查询:

    FirebaseFirestore.getInstance().collection("Cars")
            .whereEqualTo("fuel", fuelType)
            .whereEqualTo("traction", tractionType)
            .whereEqualTo("seats", seatsType)
            .whereEqualTo("gearbox", gearboxType);
    

    将根据四个属性的值过滤您的收藏“汽车”。

    我不想强迫用户填写所有过滤字段,例如,如果他们只想按燃料和座位进行过滤

    有两种方法可以解决此问题。以上述查询为例,您可以删除对“.whereEqualTo("traction", tractionType)" 和".whereEqualTo("gearbox", gearType)" 的调用,您将获得所需的结果。或者,您可以执行以下操作,因为我认为这更有意义。

    当用户第一次打开应用程序时,只需显示您的“汽车”集合中存在的所有可用汽车:

    Query query = FirebaseFirestore.getInstance().collection("Cars")
    

    如果太多,添加一个limit()调用,或者实现分页。然后只需添加选择汽车过滤器的可能性。例如,为每个过滤选项添加 4 个复选框。选择一个选项后,将其添加到您的 Query 对象中,如下所示:

    query = query.whereEqualTo("fuel", fuelType)
    

    如果用户选择了所有选项,那么查询将看起来像第一个。

    还请记住,Firestore 查询是不可变的。欲了解更多信息,请查看我在以下帖子中的回答:

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

    【讨论】:

    • 嗨马吕斯!我可以帮助您了解其他信息吗?
    猜你喜欢
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2021-07-31
    • 2018-07-16
    相关资源
    最近更新 更多