добавлять значения в firebase database сверху

204
27 февраля 2022, 08:00

Весь цикл записи и чтения работает на ура, но новые значения появляются снизу БД:

Как сделать так, Чтобы новые значения появлялись вначале?

Код добавления значений в БД:

    FirebaseDatabase.getInstance().getReference().push().setValue(
                                            new Message("1",userInput.getText().toString()));
Message.java:
public class Message {
    public String number;
    public String name;
    private long messagetime, messagedate;
    public Message() {}
    public Message(String name, String number) {
        this.number = number;
        this.name = name;
        this.messagetime = new Date().getTime();
        this.messagedate = new Date().getTime();
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public long getMessagetime() {
        return messagetime;
    }
    public void setMessagetime(long messagetime) {
        this.messagetime = messagetime;
    }
    public long getMessagedate() {
        return messagedate;
    }
    public void setMessagedate(long messagedate) {
        this.messagedate = messagedate;
    }
}

P.S.Заметил, что push() создает рандомные ключи, но по алфавиту

И получение значений(запись в ListView):


private void MessageSettings(View root) {
        ListView listt = root.findViewById(R.id.listViewAddPeople);
        adapter = new FirebaseListAdapter<Message>(getActivity(), Message.class, R.layout.item_ride_row,
                FirebaseDatabase.getInstance().getReference()) {
            @Override
            protected void populateView(View v, Message model, int position) {
                TextView number = v.findViewById(R.id.irr_reg_number);
                TextView date = v.findViewById(R.id.irr_start_date);
                TextView time = v.findViewById(R.id.irr_start_time);
                ImageView img =v.findViewById(R.id.irr_sport);
                if (model.getName().equals("1")) img.setImageResource(R.drawable.ic_1);
                else {img.setImageResource(R.drawable.ic_0);
                }
                number.setText(model.getNumber());
                date.setText(DateFormat.format("dd.MM.yyyy",model.getMessagedate()));
                time.setText(DateFormat.format("HH:mm",model.getMessagetime()));
            }
        };
        listt.setAdapter(adapter);
    }

Answer 1

Ни в одной СУБД нет понятия "порядка записей". Все записи извлекаются в произвольном порядке, если явно не указан порядок.

Отсюда следует, что нет понятия "последней записи". Но можно ввести понятие записи с максимальным значением некоторого поля. Обычно это автоинкрементное поле или временная метка добавления записи

И последнее, Firebase поддерживает вывод отсортированного списка, но не поддерживает сортировку по убыванию. Самое простое, что можно сделать, это в сообщение добавить поле order с отрицательным текущим временем

Итого получается

public class Message {
    .......
    private long order = -new Date().getTime();
    .......
}
private void MessageSettings(View root) {
    ListView listt = root.findViewById(R.id.listViewAddPeople);
    adapter = new FirebaseListAdapter<Message>(
      getActivity(),
      Message.class,
      R.layout.item_ride_row,
      FirebaseDatabase.getInstance().getReference().orderByChild("order")
    ) {
        @Override
        protected void populateView(View v, Message model, int position) {
            ................

Ну или выполнять сортировку вручную

READ ALSO
Вращение фигуры во круг точки

Вращение фигуры во круг точки

Такая проблема: в поставленной задаче требуется сделать вращение фигуры вокруг своего центра

93
Как в Spring WebFlux использовать Gson вместо Jackson?

Как в Spring WebFlux использовать Gson вместо Jackson?

Не думал что придется тратить на это время,но уже изрядно потрепался в поисках ответаИспользование spring

93
Как задать количество в веденных цифр в ANTLR4

Как задать количество в веденных цифр в ANTLR4

Для ограничения ввода четырех цифр в лексическом анализаторе Lex используется следующая конструкция: [0-9]{4}Как ограничить ввод, так что бы ввести...

79
if-else через switch-case в Java

if-else через switch-case в Java

Всегда ли конструкцию if-else можно реализовать через аналогичную switch-case в языке Java? Вопрос был на экзамене в вузе, я предположил, к примеру, что...

149