在firebase中按范围查询

时间:2018-10-09 20:14:56

标签: android firebase firebase-realtime-database

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

滑子代码

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());

结构

enter image description here

我尝试使用startAt和endAt,但是它显示的食物价格超出范围。对此有任何帮助吗?还有另一种方式进行这种查询吗?

1 个答案:

答案 0 :(得分:1)

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

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

另请参阅: