Как заказать данные firebase из последних

Firebase по умолчанию заказывает данные с самого начала, и мне нужно, чтобы они были заказаны с самого начала.

Я использую для этого временную метку и, похоже, не работает.

 private void filldata() {
        mDatabase.child("Data").orderByChild("timestamp").addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot  snapshot, String s) {
                System.out.println("snapshot:" + snapshot.toString());
            }
}
1
0
2 820
4

Ответы 4

Поскольку orderByChild() сортирует данные только в порядке возрастания, вы должны сохранить дополнительный элемент данных в своем дочернем узле со значением timestamp*(-1), а затем отсортировать (упорядочить) по этому элементу данных.

Вы можете отказаться от recyclerView, который работал у меня.

Vincent Macharia 18.06.2018 13:03

Я предлагаю использовать

mDatabase.child("Data").orderByKey().limitToLast(no_of_items_you_want)

Это даст вам список последних данных

Также, чтобы получить значение от снимка, используйте

snapshot.getValue(String.class);

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

parag pawar 04.06.2018 07:27

Вам не нужно использовать здесь orderByChild() в вашем случае, потому что firebase сама генерирует уникальный ключ, основанный на метке времени, поэтому вы можете просто использовать orderByKey() в своем запросе, и вы получите свои данные в самом последнем порядке.

The unique key is based on a timestamp, so list items will automatically be ordered chronologically. Because Firebase generates a unique key for each blog post, no write conflicts will occur if multiple users add a post at the same time. You can find more here

Ваш код правильный. Обычно предлагаемый способ заказа - использование отрицательной отметки времени.

тем не мение Ранее я заметил, что firebase упорядочивает ваши результаты по отметкам времени, как вы в настоящее время хотите, чтобы это происходило. Когда устройство получает результаты, оно меняет их порядок по прибытии (подозрение).

Чтобы проверить это, попробуйте ограничить свои результаты с помощью функции .limitToLast(n), вы поймете, что хотя firebase будет возвращать вам последние 10 (в порядке меток времени), эти результаты не будут упорядочены по меткам времени.

Следовательно, лучшим решением будет сохранить результаты firebase в списке и переупорядочить список с помощью инструмента сортировки, такого как компаратор

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