【问题标题】:How to use multiple filters in android studio with firebase [duplicate]如何在带有firebase的android studio中使用多个过滤器[重复]
【发布时间】:2020-07-27 04:24:21
【问题描述】:

我想在 firebase 数据库中使用多个过滤器,例如 SELECT * table_name WHERE age=20 && country = UK && weight=60

我的代码:

 private void loadListFood(String catagoryId) {
    adapter=new FirebaseRecyclerAdapter<Food, FoodViewHolder>(Food.class,
            R.layout.food_item,
            FoodViewHolder.class,

            foodList.orderByChild("menuId").equalTo(catagoryId)

    ) {
        @Override
        protected void populateViewHolder(FoodViewHolder foodViewHolder, Food food, int i) {
            foodViewHolder.food_name.setText(food.getName());
            Picasso.with(getBaseContext()).load(food.getImage())
                    .into(foodViewHolder.food_image);

            final Food local=food;
            foodViewHolder.setItemClickListener(new ItemClickListner() {
                @Override
                public void onClick(View view, int position, boolean isLongClick) {
                    //Toast.makeText(FoodList.this, ""+local.getName(), Toast.LENGTH_SHORT).show();
                    Intent foodDetail = new Intent(FoodList.this,FoodDetail.class);
                    String FoodID=adapter.getRef(position).getKey().toString();
                    foodDetail.putExtra("FoodId",FoodID);
                    startActivity(foodDetail);


                }
            });

        }
    };

    recyclerView.setAdapter(adapter);
}

所以我想将 menuID = categoryID 和 status==available 项从 firebase 数据库加载到 recyclerview 中

【问题讨论】:

  • Firebase 数据库查询只能对单个属性进行排序/过滤。在许多情况下,可以将要过滤的值组合成一个(合成)属性。有关此方法和其他方法的示例,请在此处查看我的答案:stackoverflow.com/questions/26700924/…

标签: java android firebase firebase-realtime-database


【解决方案1】:

在实时数据库中,您不能使用AND 查询。相反,您可以将这些属性组合成一个属性:

Users
  randomId
       age :20
       country: UK
       weight : 60
       age_country_weight : 20_UK_60

那么你可以这样做:

foodList.orderByChild("age_country_weight").equalTo("20_UK_60")

【讨论】:

    【解决方案2】:

    Firebase Realtime Database 不支持多个equalTo。如果您想继续使用Realtime Database,您将需要以不同的方式构造您的数据,以便您可以基于一个equalToorderByChild 进行查询。

    但是你可以通过开启Firestore来避免这个限制,它支持基于多个whereEqualToQuery,例如:

    Query query = collectionRefference.
    .whereEqualTo("menuID", "categoryID")
    .whereEqualTo("status", "available");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-08
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      相关资源
      最近更新 更多