Я использую базу данных Firebase RealTime. Я хочу перечислить по возрастанию в Firebase - PullRequest
1 голос
/ 21 июня 2020

У меня проблемы с количеством цифр в списке строк.

Я хочу, чтобы поле с именем «оценка» было отсортировано от большего к меньшему, но, например, есть 10 пользователей, 9 из них имеют оценку с 5 цифрами, в то время как 1 пользователь имеет оценку с 6 цифрами, поэтому я хочу, чтобы более высокая оценка была в верхней части списка, который состоит из 6 цифр, как я упоминал выше, но как только оценка становится 6 цифр, она становится конец списка, который должен быть наверху ..

Как решить эту проблему .. ??

Query query = ref.child("Kullanıcılar").orderByChild("puan");
query.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        list.clear();
        for (DataSnapshot ds: dataSnapshot.getChildren())
        {
            i++;
            user = ds.getValue(User.class);
            list.add(i +" - "+ user.getIsim().toString() + " " + user.getPuan().toString());
            //list.add(user.getIsim().toString() + " " + user.getPuan().toString());
        }
        listView.setAdapter(adapter);
        Collections.reverse(list);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

JSON:

{
  "Kullanıcılar": {
    "5bdhzNz3SlhzcCAYJaDpJyeppSx2": {
        "email": "egemenn1453@gmail.com",
        "id": "5bdhzNz3SlhzcCAYJaDpJyeppSx2"
        "isim": "egemen"
        "puan": "24000"
    },
    "7iJJxUswPPhkLXfm6LNHNCCRSeJ3": {
        "email": "kalantolga@hotmail.com",
        "id": "7iJJxUswPPhkLXfm6LNHNCCRSeJ3",
        "isim": "falanfilan",
        ,
        "puan": "25000"
    },
    "JoSwIRjzrxTHTz7CXaiQLAjQMCZ2": {
        "email": "terketyaman160@gmail.com",
        "id": "JoSwIRjzrxTHTz7CXaiQLAjQMCZ2"
        "isim": "fropsello",
        "puan": "56525"
    }
}

1 Ответ

0 голосов
/ 21 июня 2020

Поскольку вы храните оценки в виде строк, Firebase отсортирует их по лексикографическому (строковому) значению. В лексикографическом порядке «9» стоит после «10», потому что «9»> «1». Поначалу это может показаться нелогичным, но это полностью верно.

Рекомендуемое решение - хранить ваши оценки в виде чисел:

{
  "Kullanıcılar": {
    "5bdhzNz3SlhzcCAYJaDpJyeppSx2": {
        "email": "egemenn1453@gmail.com",
        "id": "5bdhzNz3SlhzcCAYJaDpJyeppSx2"
        "isim": "egemen"
        "puan": 24000
    },
    "7iJJxUswPPhkLXfm6LNHNCCRSeJ3": {
        "email": "kalantolga@hotmail.com",
        "id": "7iJJxUswPPhkLXfm6LNHNCCRSeJ3",
        "isim": "falanfilan",
        "puan": 25000
    },
    "JoSwIRjzrxTHTz7CXaiQLAjQMCZ2": {
        "email": "terketyaman160@gmail.com",
        "id": "JoSwIRjzrxTHTz7CXaiQLAjQMCZ2"
        "isim": "fropsello",
        "puan": 56525
    }
}

Теперь узлы имеют числовые c и будут правильно отсортировано, поскольку 10> 9 in numeri c порядок сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...