Сортировать данные из FireBase по 2 ключам - PullRequest
0 голосов
/ 27 февраля 2019

Я создал игровое приложение и сохраняю записи в базе данных FireBase в реальном времени.внешний вид базы данных:

{
    "Ka8xxTgyFB8yYKH50j" : {
        "score" : 10,
        "seconds" : 1325
    },
    "K222xTgyFBF33FD50j" : {
        "score" : 10,
        "seconds" : 425
    },
    "Ka32T23R328yYKH50j" : {
        "score" : 5,
        "seconds" : 115
    },
    "F323F32FB8yYKH50j" : {
        "score" : 30,
        "seconds" : 2335
    }
    }
}

Я хочу получить данные из FireBase, отсортированные по счету, а затем отсортировать по секундам.правильный порядок данных в этом примере должен быть следующим:

оценка: 5 секунд: 115

оценка: 10 секунд: 425

оценка: 10 секунд: 1325

оценка: 30 секунд: 2335

Как я могу сделать это, используя orderByChild или другим способом?спасибо

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Поскольку firebase не разрешает мультисортировку, я рекомендую вам создать столбец сортировки и обновить его в соответствии с вашими требованиями к сортировке.В вашем случае вы можете объединить секунды и счет, а затем сохранить его как целое число.Чтобы получить одинаковую длину, секунды должны быть дополнены 0, скажем, 6 символов (зависит от вашего счета и максимально возможных значений секунд).Допустим, максимальное значение равно 100, а максимальное количество секунд равно 50000, ваш порядок сортировки будет представлять собой комбинацию score и 5 chars of seconds, приведенную к целому числу.

Пример:

{
    "Ka8xxTgyFB8yYKH50j" : {
        "score" : 10,
        "seconds" : 1325,
        "sort_order": 1001325
    },
    "K222xTgyFBF33FD50j" : {
        "score" : 10,
        "seconds" : 425,
        "sort_order": 1000425
    },
    "Ka32T23R328yYKH50j" : {
        "score" : 5,
        "seconds" : 115
        "sort_order": 5000115
    },
    "F323F32FB8yYKH50j" : {
        "score" : 30,
        "seconds" : 2335,
        "sort_order": 3002335
    }
}

Таким образом, вы можете очень быстро отсортировать его в порядке возрастания и убывания.

0 голосов
/ 27 февраля 2019

Вы можете попробовать вот так.Сначала сортируйте данные во время загрузки.

databaseReference.**orderByValue("score")**.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {

                            }

                            @Override
                            public void onCancelled(DatabaseError databaseError) {

                            }

                        });

После этого выполните сортировку еще раз при получении данных

    setmFirebaseAdapter1(new FirebaseRecyclerAdapter<taskdata, wealth.ShowDataViewHolder>(
                taskdata.class, R.layout.budget_rv_layout, wealth.ShowDataViewHolder.class,retrieceds.**orderByChild(seconds)**) {
            public void populateViewHolder(final wealth.ShowDataViewHolder viewHolder, final taskdata model, final int position) {
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...