Jam*_*mes 2 android firebase firebase-realtime-database
我有一个 Firebase 架构,其中包含带有几个值的表“目录”
目录表
我使用 avgDrinkPrice 作为订单做了一个 orderByChild() 并且输出是错误的。
输出
代码
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.
Run Code Online (Sandbox Code Playgroud)
我尝试使用其他数值进行排序,例如纬度字段、经度和评级,它们的顺序是正确的。只有按 avgDrinkPrice 排序时,顺序才会出错。我不明白为什么。请帮忙。
根据您的屏幕截图,该avgDrinkPrice属性为 a string,因此结果已正确排序。只是它们按字典顺序排序 - 而不是按数字排序。
在按子项排序时,有更多关于 Firebase 如何对数据进行排序的信息,请点击此处:
使用时
orderByChild(),包含指定子键的数据将按如下顺序排序:
- 具有
null指定子键值的子项首先出现。- 与值儿童
false的指定子键来下。如果多个子代的值为false,则它们按字典顺序按键排序。- 接下来是指定子键值为 true 的子项。如果多个子代的值为
true,则它们按字典顺序按键排序。- 接下来是带有数值的孩子,按升序排序。如果多个子节点对于指定的 > 子节点具有相同的数值,则它们按键排序。
- 字符串在数字之后,按字典顺序升序排列。如果指定子节点的多个子节点具有相同的值,则它们按字典顺序按关键字排序。
- 对象排在最后,并按字典顺序按键升序排序。
要让孩子按数字排序,您必须将其存储avgDrinkPrice为数字。而且lati,longti和rating也可能更好地存储为数字。
使用lati,longti和rating属性的排序可能看起来是数字,但那是因为排序的字符串值可能具有相同的位数 - 而avgDrinkPrice.
| 归档时间: |
|
| 查看次数: |
1189 次 |
| 最近记录: |