【问题标题】:Querying by range in firebase在firebase中按范围查询
【发布时间】:2019-03-14 16:23:40
【问题描述】:

我有一个食品价格范围滑块,根据滑块的最小值和最大值,我想显示此范围内的食品。

滑块代码

multiSlider.setOnThumbValueChangeListener(new MultiSlider.SimpleChangeListener() {
    @Override
    public void onValueChanged(MultiSlider multiSlider, MultiSlider.Thumb thumb, int thumbIndex, int value) {
        if (thumbIndex == 0) {
            min = String.valueOf(value);
            min1.setText(min);
        } else {
            max = String.valueOf(value);
            max1.setText(max);
        }
    }
});

alertD.setPositiveButton("Done", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        SearchPrice(min, max);
    }
});

查询代码

private void SearchPrice(String min, String max) {
    Query searchByName = foodList.orderByChild("price").startAt(min).endAt(max);
    FirebaseRecyclerOptions<Food> foodOptions = new FirebaseRecyclerOptions.Builder<Food>().setQuery(searchByName, Food.class).build();

    Searchadapter = new FirebaseRecyclerAdapter<Food, FoodViewHolder>(foodOptions) {
        @Override
        protected void onBindViewHolder(@NonNull FoodViewHolder viewHolder, int position, @NonNull Food model) {
            viewHolder.food_name.setText(model.getName());
            viewHolder.food_price.setText(model.getPrice());

结构

我尝试使用 startAt 和 endAt ,但它显示的食物价格超出了范围。请问有什么帮助吗?是否有其他方法可以进行此类查询?

【问题讨论】:

  • 添加 firebase 数据库结构可能会帮助我们为您提供帮助?
  • 您还应该简化您发布的查询代码。尝试只选择与 firebase readtime 数据库查询有关的代码
  • 请看一下,我添加了结构。
  • @StefanoTokyo 现在返回什么?什么是最小值 - 最大值?你会添加整个查询和 min -max 的值吗?但是,我认为您错过了:orderByKey() 在 startAt 和 ... 之前
  • 我的第一个猜测是你有minmax 作为数字,而你数据库中price 的值是一个字符串。如果是这个原因,试试foodList.orderByChild("price").startAt(""+min).endAt(""+max)

标签: android firebase firebase-realtime-database


【解决方案1】:

您将数值作为字符串存储在数据库中。 Firebase 按字典顺序对字符串进行排序。按照你的字典顺序,你有从 1 到 12 的数字,它们被排序为"1", "10", "11", "12", "2", "3", "4", "5", "6", "7", "8", "9"。所以从"1""10" 的范围正是这两个“数字”。

要解决此问题,请将您的数值作为实际数字存储在数据库中。

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 2018-04-10
    相关资源
    最近更新 更多