按降序对Firebase数据进行排序

时间:2020-04-06 16:34:58

标签: java android sorting firebase-realtime-database leaderboard

我想创建一个高分列表视图,并使用orderByValue将条目按降序显示,我将它们按升序进行排序,但是当对我的arraylist使用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 }

答案:

通过简单地在0索引处添加到arraylist来解决此问题,所有其他元素都被简单地向右移以导致列表视图降序。

            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

1 个答案:

答案 0 :(得分:0)

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



    }