Сортировка событий по дате в Firebase

У меня есть данные новостей в Firebase в следующем формате:

Сортировка событий по дате в Firebase

Я хочу отсортировать его по дате (newsDate) в порядке убывания (последний вверху). Я добавил это в свой код при получении данных из Firebase:

databaseReference.orderByChild("newsDate").addChildEventListener(new ChildEventListener() { // on child added methods }

Но это только сортировка строк, поэтому порядок становится таким: 08.04.2018 12:00, 13.08.2018 10:30, 30.07.2018 00:00

Я знаю, что это из-за алфавитной сортировки. Хотите знать, как настроить порядок сортировки в моем формате даты (дд / мм / гггг чч: мм), а также в порядке убывания?

Вам нужно использовать метку времени, firebase не может отсортировать строку даты. firebase.google.com/docs/reference/android/com/google/fireba‌ se /…

Yayo Arellano 12.10.2018 10:06

Мне нужно отсортировать, не меняя тип даты в Firebase. Так что что-то нужно сделать в передней части. Например, собрать все данные в массив, затем отсортировать их и опубликовать? Или опубликовать его на ходу в правильном порядке, чтобы он оставался правильным?

Hasan Hasanzade 14.10.2018 11:57

У меня была такая же проблема, и я решил ее по этому вопросу: stackoverflow.com/questions/64677530/…

Aziz 04.11.2020 11:36
1
3
3 067
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Wondering how I can customize sorting order with my date format (dd/mm/yyyy hh:mm)?

Вы можете решить эту проблему, изменив тип вашего свойства newsDate со String на timpestamp. Пожалуйста, взгляните на мой ответ из этого Почта, чтобы узнать, как вы можете этого добиться.

and also in descending order?

Чтобы решить эту проблему, см. Ответ Фрэнка ван Пуффелена из этого Почта.

Привет, Хасан! Вы пробовали мое решение выше, оно работает?

Alex Mamo 13.10.2018 05:59

Извините, но мне это не помогло. Потому что я не могу изменить свойство newsDate в Firebase. Мне просто нужно отсортировать то, что существует на Firebase. Теперь придумываю другой способ сделать это. Например, собрать все данные в массив, затем отсортировать их и опубликовать? Или опубликовать его на ходу в правильном порядке, чтобы он оставался правильным?

Hasan Hasanzade 14.10.2018 11:59

Нет, не является! Если ответ на вашу проблему заключается в том, что не мочь решается так, как вы хотите, это не означает, что ответ неверен. Это не помогло вам так, как вы ожидали, но именно так работает Firebase. Самый простой и правильный способ решения этого вопроса - изменить тип недвижимости. Это можно сделать, просто преобразовав фактическую строку в timestamp. Если вы решите упорядочить строки, обратите внимание, что элементы будут упорядочены лексикографически, и наверняка это не то, что вам нужно.

Alex Mamo 14.10.2018 12:14

Поэтому, если вы считаете, что мой ответ верен в соответствии с вариантом использования Firebase и может также помочь будущим посетителям, рассмотрите возможность его принятия, щелкнув галочку слева под стрелками для голосования. Должен поменять цвет на зеленый. Я бы оценил это. Спасибо!

Alex Mamo 14.10.2018 12:15

вместо даты попробуйте сэкономить миллисекунды, а затем выполнить простой запрос, как показано ниже. или просто запросить дату.

Запрос с использованием миллисекунд

databaseReference.orderByChild("newsDate").startAt(new DateTime().getMillis())

Запрос с использованием даты

databaseReference.orderByChild("newsDate").startAt(new DateTime())

Или

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm");
String currentDateandTime = sdf.format(new Date());

databaseReference.orderByChild("newsDate").startAt(currentDateandTime )

Другие вопросы по теме