Android Firebase合并多个查询

时间:2018-02-18 09:32:29

标签: android firebase

我在firebase上有这张表;

{
"car1" : {
"carId" : "123asd45",
"carImageUrl" : "url",
"carName" : "Champion"
},
"car2" : {
"carId" : "123aa456",
"carImageUrl" : "url",
"carName" : "Super"
},
"car3" : {
"carId" : "1234ew5",
"carImageUrl" : "url",
"carName" : "A"
}
}

我正在使用firebase ui adapter;

 Query query = FirebaseDatabase.getInstance()
                   .getReference()
                   .child("carmodels")
                   .orderByChild("carName")
                   .equalTo(MYFILTER1)
                   .limitToLast(30);
  FirebaseRecyclerOptions<Car> options =
            new FirebaseRecyclerOptions.Builder<Car>()
                    .setQuery(query, Car.class)
                    .build();

上面的代码工作正常,但我想做的是;过滤多个字符串,如;

 Query query = FirebaseDatabase.getInstance()
                   .getReference()
                   .child("carmodels")
                   .orderByChild("carName")
                   .equalTo(MYFILTER1)
                   .limitToLast(30);
 Query query2 = FirebaseDatabase.getInstance()
                   .getReference()
                   .child("carmodels")
                   .orderByChild("carName")
                   .equalTo(MYFILTER2)
                   .limitToLast(30);

然后合并查询结果并将其提供给选项;

FirebaseRecyclerOptions<Car> options =
        new FirebaseRecyclerOptions.Builder<Car>()
                .setQuery(MERGEDQuery, Car.class)
                .build();

那么有可能吗?或者你为此建议另一个解决方案?谢谢

编辑:

我有很多过滤器,所以在firebase上使用另一个子项,如“过滤器”:“filter1_filter2_filter3 ..”可能会有问题。

2 个答案:

答案 0 :(得分:0)

您可以通过在数据结构上的单个属性上组合过滤器键来在此处进行一些忍者移动。

{ "car1" : { "carId" : "123asd45", "carImageUrl" : "url", "carName" : "Champion", "filters" : "MYFILTER1_MYFILTER2" }, "car2" : { "carId" : "123aa456", "carImageUrl" : "url", "carName" : "Super", "filters" : "MYFILTER1_MYFILTER2" }, "car3" : { "carId" : "1234ew5", "carImageUrl" : "url", "carName" : "A", "filters" : "MYFILTER1_MYFILTER2" } }

然后查询:

 Query query2 = FirebaseDatabase.getInstance()
               .getReference()
               .child("carmodels")
               .orderByChild("carName")
               .equalTo(MYFILTER1_MYFILTER2)
               .limitToLast(30);

答案 1 :(得分:0)

对于谁需要解决该问题的方法,我解决了这个问题,以过滤我的recycleview适配器中的项目。过滤后的项目在recycleview上可见,其他项目现在不可见。