Сортировать данные Firebase в порядке убывания

Я хочу создать список рекордов ListView с записями, отображаемыми в порядке убывания, с использованием orderByValue я сортирую их в порядке возрастания, однако при использовании Collections.reverse() с моим массивом записи по-прежнему не меняются местами в ListView.

 private Query reference; //database reference
private ListView ListView; //creating listview
private ArrayList<String> arrayList = new ArrayList<>();

private ArrayAdapter<String> adapter; //creating array adapter
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_high_scores);


    reference = FirebaseDatabase.getInstance().getReference("Highscores").orderByValue(); //reference the highscore section in database



    ListView = (ListView) findViewById(R.id.list_view); //find the list view in the xml


    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList); // set the adapter to the list
    Collections.reverse(arrayList);

    ListView.setAdapter(adapter);

    reference.addChildEventListener(new ChildEventListener() { // add a child listener for the database
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            String value = dataSnapshot.getValue().toString(); // convert the values in the databse to string
            arrayList.add(value); //add them to the arraylist
            adapter.notifyDataSetChanged(); //notify that the dataset has changed



        }

данные в базе есть

{ "-M4FPEiJ_DVc9kaQrebz": 0,

"-M4FPIuMbArT6KjtrDtO" : 6,

"-M4FPP5EdC1CaKgOVECX": 17,

"-M4FPTWg7JkKRvWakRkH": 12,

"-M4FPYPNVZIjhBM6gVWW" : 11,

"-M4FPbL9I-fsQwRvVIFX": 5 }

Отвечать:

Удалось исправить это, просто добавив в arraylist индекс 0, несмотря ни на что, все остальные элементы были просто смещены вправо, что привело к просмотру списка в порядке убывания.

            String value = dataSnapshot.getValue().toString(); // convert the values in the databse to string
            arrayList.add(0, value); //add them to the arraylist
            adapter.notifyDataSetChanged(); //notify that the dataset has changed

person Chirag Vijay    schedule 06.04.2020    source источник
comment
Пожалуйста, отредактируйте свой вопрос, чтобы отобразить данные в Highscores в вашей базе данных (в виде текста, без скриншотов, пожалуйста). Вы можете получить это, щелкнув ссылку Экспорт JSON в дополнительном меню (⠇) на вашем Консоль базы данных Firebase.   -  person Frank van Puffelen    schedule 06.04.2020
comment
Пожалуйста, проверьте дубликат, чтобы увидеть, как вы можете упорядочить результат по убыванию.   -  person Alex Mamo    schedule 07.04.2020


Ответы (1)


reference.addChildEventListener(new ChildEventListener() { // добавить дочерний прослушиватель для базы данных @Override public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        String value = dataSnapshot.getValue().toString(); // convert the values in the databse to string
        arrayList.add(value); //add them to the arraylist
        Collections.reverse(arrayList);  //add this line for short solution

        adapter.notifyDataSetChanged(); //notify that the dataset has changed



    }
person Aadil    schedule 06.04.2020
comment
Пытался сделать это, но, похоже, не работает, исходные записи были в порядке (0,6,17,12,11,5). После добавления вашего предложения в ListView они отображаются в порядке (17,11,5,0,6,12) - person Chirag Vijay; 06.04.2020
comment
ссылка = FirebaseDatabase.getInstance().getReference(Highscores).orderByValue(); Попробуйте удалить orderByValue() из этой ссылки = FirebaseDatabase.getInstance().getReference(Highscores”); - person Aadil; 07.04.2020