我正在尝试为帖子制作过滤器,用户可以从中选择他们想要查看的城市或区域的帖子。还有三种不同类别的帖子。 (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": {
.
.
.
}
}
答案 0 :(得分:0)
我已经解决了自己的问题 - 如果有人遇到同样的问题,您可以通过在Firebase规则标签上索引数据来有效地进行查询。 https://firebase.google.com/docs/database/security/indexing-data