Firebase查询的简单过滤器不起作用

时间:2017-04-22 17:01:13

标签: android firebase firebase-realtime-database

我正在尝试为帖子制作过滤器,用户可以从中选择他们想要查看的城市或区域的帖子。还有三种不同类别的帖子。 (cat_a,cat_b,cat_c)。

switch (category) {
    case 0:
        // if category is 0, then show all posts
        mQuery = db.getReference("post");
        break;
    case 1:
        mQuery = db.getReference("post").orderByChild("category").equalTo("cat_a");
        break;
    case 2:
        if (cityPref == 0) {
             mQuery = db.getReference("post")
                        .orderByChild("category")
                        .equalTo("cat_b");
        } else {
             mQuery = db.getReference("post")
                        .orderByChild("categoryCity")
                        .equalTo("cat_b" + cityString);
        }
        break;
    case 3:
        if (cityPref == 0) {
             mQuery = db.getReference("post")
                        .orderByChild("category")
                        .equalTo("cat_c");
        } else if (districtPref == 0) {
             mQuery = db.getReference("post")
                        .orderByChild("categoryCity")
                        .equalTo("cat_c" + cityString);
        } else {
             mQuery = db.getReference("post")
                        .orderByChild("categoryDistrict")
                        .equalTo("cat_c" + district);
        }
        break;
    default:
        mQuery = db.getReference("post");
}

有趣的是,并非所有的查询都不起作用,但对于每个类别的帖子,更具体的查询所有所有帖子都有效。以下查询工作正常。

 mQuery = db.getReference("post");
 mQuery = db.getReference("post")
            .orderByChild("categoryCity")
            .equalTo("cat_b_" + cityString);
 mQuery = db.getReference("post")
            .orderByChild("categoryDistrict")
            .equalTo("cat_c_"+ city + "_" + district);

我使用category查询的所有帖子都不起作用...而且我100%确定FirebaseDatabase在数据中有category。另外,我尝试使用Log.v(...)检查switch语句中是否包含所有位置以及if语句是否已到达。我真的很感激任何帮助!

仅供参考,这是我在Firebase中的数据结构:

"post": {
    "post_uid_1": {
        "category": "cat_a",
        "categoryCity": "cat_a_seoul",
        "categoryDistrict": "cat_a_seoul_songpa",
        "city": "seoul",
        "context": "this is context",
        "district": "songpa",
        .
        .
        .
    }
    "post_uid_2": {
        .
        .
        .
    }
}

1 个答案:

答案 0 :(得分:0)

我已经解决了自己的问题 - 如果有人遇到同样的问题,您可以通过在Firebase规则标签上索引数据来有效地进行查询。 https://firebase.google.com/docs/database/security/indexing-data