Возврат нулевых узлов в запросе startAt в реальном времени - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь сделать нумерацию страниц в реальном времени. Я делаю запрос первый раз с лимитом 15 и второй раз, основываясь на последнем элементе uid. Я делаю второй запрос, где предполагается, что startAt () с этим uid. После первого запроса я получаю как предполагается 15 пунктов. В следующий раз предполагается отправить мне обратно 9 предметов. Но он посылает мне ноль

Код ответа

 DatabaseReference mReference = realtimeReference.child("OnlineUsers/" + neededGender);

    Query query;
    if (uid.equals("")){
        query = mReference.orderByChild("rating").limitToLast(TOTAL_ITEMS_TO_LOAD);
    }else {
        //Pagination query with last uid to start
        query = mReference.orderByChild("rating").startAt(uid).limitToLast(TOTAL_ITEMS_TO_LOAD);
    }
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            final List<OnlineUser> userList = new ArrayList<>();
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                OnlineUser user = postSnapshot.getValue(OnlineUser.class);
                userList.add(new OnlineUser(user.getUid(), user.getName(), user.getImage(), user.getGender(), user.getCountry(), user.getRating()));
            }
            EventBus.getDefault().post(new ListEvent(userList));
        }

Структура базы данных enter image description here

1 Ответ

1 голос
/ 14 января 2020

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

Таким образом, в вашем case это будет:

mReference.orderByChild("rating").startAt(rating, key).limitToLast(TOTAL_ITEMS_TO_LOAD);

Это предполагает, что у вас есть рейтинг узла в rating и его ключ в key.

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