【发布时间】:2017-08-11 01:19:11
【问题描述】:
我想使用orderByChild 进行查询,并使用这些孩子的密钥进行过滤。在这种情况下,我的键和值都是用于查询我想要的数据。
当键包含数字时会出现我的问题,如果键只有字母,那么没有问题。自从我直接从 firebaser 阅读 another answer 中的建议以来,我一直在尝试保持数字中的字母。
我的json是:
{
"my_list":{
"100xyz":{
"value1": 100,
"value2": 100,
"name":"100xyz"
},
"200xyz":{
"value1": 200,
"value2": 200,
"name":"200xyz"
},
"300xyz":{
"value1": 300,
"value2": 300,
"name":"300xyz"
},
"400xyz":{
"value1": 400,
"value2": 400,
"name":"400xyz"
},
"500xyz":{
"value1": 500,
"value2": 500,
"name":"500xyz"
}
}
}
我的代码是:
DatabaseReference root = FirebaseDatabase.getInstance().getReference().getRoot();
DatabaseReference list = root.child("my_list");
list.orderByChild("value2").startAt(100, "100xyz").endAt(500, "200xyz").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
SomeModel someModel = dataSnapshot.getValue(SomeModel.class);
Log.d("SOME_MODEL", someModel.getName());
}
});
问题是我可以在控制台中看到 4 个孩子:
D/SOME_MODEL: 100xyz
D/SOME_MODEL: 200xyz
D/SOME_MODEL: 300xyz
D/SOME_MODEL: 400xyz
但我应该只被看到 2
D/SOME_MODEL: 100xyz
D/SOME_MODEL: 200xyz
我想强调:只要键没有数字,它确实有效。
当key有数字时,如何同时按orderByChild和key过滤?
【问题讨论】:
-
因为我很可能是回答您所说的问题的 Firebaser(当您提到另一个问题时,总是感谢链接),我很乐意提供帮助。您能否将您的问题简化为单个 JSON,并使用一个相应的代码示例重现该问题?
-
@FrankvanPuffelen 抱歉跳过链接,我从昨天开始尝试解决这个问题,现在有点累了。我已经应用了您建议的版本。请让我知道我是否可以做任何其他事情来改善我的问题。
-
你为什么不使用
startAt(String value, String key)?你认为double值是什么意思? -
@cricket_007 因为我的“value2”是双精度的,所以最好这样查找。为了给你更多的背景信息,我正在尝试做类似 GeoFire 的事情,“value1”是我的纬度,“value2”是我的经度,关键是两者的组合。这样我可以 orderByChild("longitude"),但只能在一个纬度范围内(关键)。你认为问题是双重的吗?因为只有当键有数字时才会出现问题。
标签: android firebase firebase-realtime-database