我有一个 firebase 架构,其中包含带有一些值的“Catalog”表
目录表
![enter image description here](https://i.stack.imgur.com/HtV4u.jpg)
我使用 avgDrinkPrice 作为订单执行了 orderByChild() ,但输出错误。
Output
![enter image description here](https://i.stack.imgur.com/qRBX0.jpg)
Code
myRef.orderByChild("avgDrinkPrice").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
catalogList.clear();
for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
Catalog catalog = postSnapshot.getValue(Catalog.class);
catalogList.add(catalog);
Log.d(TAG,"Drink price " + catalog.getAvgDrinkPrice());
catalogSize++;
}
//LOOP ENDS.
我尝试过使用其他数值(例如纬度字段、经度和评级)进行排序,它们的顺序是正确的。只有按avgDrinkPrice排序时才会出现顺序错误。我不明白为什么。请帮忙。
根据你的截图,avgDrinkPrice
财产是一个string
,所以结果are排序正确。只是它们是按字典顺序排序的,而不是按数字排序。
有关 Firebase 在按子排序时如何对数据进行排序的更多信息,here:
使用时orderByChild()
,包含指定子键的数据将按如下顺序排序:
- 儿童有
null
指定子键的值排在第一位。
- 具有以下价值的儿童
false
接下来是指定的子键。如果多个孩子的值为false
,它们按字典顺序按键排序。
- 接下来是指定子键值为 true 的子项。如果多个孩子的值为
true
,它们按字典顺序按键排序。
- 接下来是具有数值的子项,按升序排序。如果多个子节点对于指定的 > 子节点具有相同的数值,则它们按键排序。
- 字符串位于数字之后,并按字典顺序升序排列。如果指定子节点的多个子节点具有相同的值,则它们按键按字典顺序排序。
- 对象排在最后,并按字典顺序按键升序排序。
要让孩子们按数字排序,您必须存储avgDrinkPrice
作为一个数字。和lati
, longti
and rating
也可能更好地存储为数字。
使用您的订单lati
, longti
and rating
属性可能看起来是数字,但那是因为被排序的字符串值可能具有相同的位数 - 但情况并非如此avgDrinkPrice
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)