【问题标题】:Android Firebase Merging multiple queriesAndroid Firebase 合并多个查询
【发布时间】:2018-02-18 09:32:29
【问题描述】:

我在 firebase 上有这张桌子;

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

我正在使用类似 Firebase 的 UI 适配器;

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

然后将它们合并查询结果,交给options;

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

那么有可能发生这样的事情吗?还是您为此建议另一种解决方案?谢谢

编辑:

我有很多过滤器,因此在 Firebase 上使用另一个子过滤器,例如 "filters":"filter1_filter2_filter3.." 可能会有问题。

【问题讨论】:

  • 您希望返回什么组合查询作为结果?对应MYFILTER1、MYFILTER2等的车都有吗?
  • @AlexMamo 有很多过滤器。我回答了我的问题,您可以查看我是如何解决的。我不知道这可能是不好的解决方法,但它工作正常。

标签: android firebase


【解决方案1】:

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

{ "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);

【讨论】:

  • 谢谢,但我有很多过滤器,在这种情况下可能会有问题
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2017-07-31
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多