Как я вижу в вашей базе данных, вы храните все эти значения в виде строк, а не чисел.Когда вы пытаетесь упорядочить строки, вам нужно знать, что строки упорядочены lexicographically
.
. Для решения этой проблемы можно быстро изменить тип данных со строки на int
или long
.Для чисел это нормальный порядок:
Но для строк это нормальный порядок:
- "1308"
- "1309"
- "131"
- "1310"
В Firebase и, насколько я знаю, нет операторов, позволяющих изменить это поведение.Вместо этого вам придется изменить данные, чтобы получить желаемое поведение.Поэтому сохраняйте значения в том порядке, в котором они вам нужны при лексикографической сортировке.Для чисел вы можете сделать это, заполнив их нулями:
- "0131" // ноль, добавленный до
- "0132" // ноль, добавленный до
- ......
- "1308"
- "1309"
- "1310"
- "1311"
Чтобы упорядочить результаты, используйте следующий код:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference tableRef = rootRef.child("table");
Query query = tableRef.orderByChild("teamPoints");
query.addListenerForSingleValueEvent(/* ... */);
Я пропустил это, но в соответствии с комментарием @ FrankvanPuffelen, пожалуйста, смотрите пост, в котором объясняется, как вы можете изменить порядок.