首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android修复复合查询

Android修复复合查询
EN

Stack Overflow用户
提问于 2021-03-31 12:35:16
回答 1查看 51关注 0票数 2

我正在android Studio中开发一个汽车租赁Android应用程序。我正在使用“过滤器”选项,这样用户就可以过滤可用的汽车(例如,他们可以选择只看到有5个座位的柴油汽车,或者他们可以选择只看到全轮驱动的汽车,等等)。我有一个名为FilterCars的活动,例如,用户可以通过4个组件过滤:燃料、牵引、座椅、变速箱。在提交过滤器后,将根据它们的喜好显示汽车。我将这些过滤器传递给Cars活动( cars是在RecyclerView中显示的)和捆绑附加(成功),所以我在Cars.java中将成功用户的过滤器存储在变量"fuelType、tractionType、seatsType、gearboxType“中。

使用这些过滤器,我可以将一个查询传递给回收视图适配器,如下所示:

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

效果很好。

我的问题是:我不想强迫用户完成所有的过滤器字段,因此,例如,如果他们只想通过燃料和座位过滤,他们可以这样做。如何生成一个只包含用户选择的过滤器的复合查询?我思考这个问题但我无法解决的一种方法是,例如,如果用户不想通过牵引力过滤,在tractionType中存储类似“(空)”之类的内容,并在复合查询中而不是在tractionType查询"whereEqualTo“中放置返回所有车辆的内容,那么复合查询将只通过选择的过滤器进行过滤。

对怎么做有什么建议吗?还是有更好的方法可以避免将空答案放在复合查询中?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-31 13:15:25

以下查询:

代码语言:javascript
复制
FirebaseFirestore.getInstance().collection("Cars")
        .whereEqualTo("fuel", fuelType)
        .whereEqualTo("traction", tractionType)
        .whereEqualTo("seats", seatsType)
        .whereEqualTo("gearbox", gearboxType);

将过滤您的集合“汽车”的四个属性的价值。

我不想强迫用户完成所有的过滤字段,例如,如果他们只想通过燃料和座位进行过滤

有两种方法可以解决这个问题。以上面的查询为例,您可以删除对".whereEqualTo("traction",tractionType)“和”.whereEqualTo(“变速箱”,gearboxType)“的调用,并得到所需的结果。或者,你可以这样做,因为这在我看来更有意义。

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

代码语言:javascript
复制
Query query = FirebaseFirestore.getInstance().collection("Cars")

如果有太多的调用,添加限制()调用,或者实现分页。然后简单地添加选择汽车过滤器的可能性。例如,为每个筛选选项添加4个复选框.一旦选择了一个选项,将其添加到查询对象中,如下所示:

代码语言:javascript
复制
query = query.whereEqualTo("fuel", fuelType)

如果用户选择所有选项,则查询将类似于第一个选项。

还请记住,Fi还原查询是不可变的。欲了解更多信息,请查阅以下帖子:

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66888002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档