Ограничение пагинации Firebase для первого Android

Я не знаю, почему мой limitToFirst не работает. Я следил за документацией Firebase.

  databaseReference = FirebaseDatabase.getInstance().getReference();
  Query queryRef = databaseReference.orderByValue().limitToFirst(6);
            queryRef.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    for(DataSnapshot ds : dataSnapshot.getChildren()) {
                        WallpaperInfo userId =  ds.getValue(WallpaperInfo.class);
                        list.add(userId);
                        oldestPostId = ds.getKey();
                }
                    Log.d("list",String.valueOf(list.size()));
                    adapter = new WallpaperGridAdapter(rootView.getContext(),list);
                    gridView.setAdapter(adapter);
                    adapter.notifyDataSetChanged();
                    adapter.notifyDSC();
                }
...
};

Я получаю все данные из моего списка. Мои данные JSON (фиктивные)

{
  "walls" : {
    "-L7miwY988GOdQKhSYZp" : {
      "artistID" : 141,
      "category" : "Luffy",
      "downloads" : 1421,
      "favs" : 71,
      "picURL" : "https://firebasestorage.googleapis.com/v0/b/onepiecewallpaper-5e0c5.appspot.com/o/walls%2Fimage%3A87242?alt=media&token=e1654c8d-8be4-465a-a8cd-cb9075716824",
      "sets" : 7877,
      "tags" : [ "one piece", "Luffy" ],
      "views" : 9898
    },
....    }

Я тоже регистрирую ключи, которые дают мне вывод: -

03-18 11:11:59.893 11733-11733/we_pirate.one.com.onepiecewallpaper D/keys: -L7miwY988GOdQKhSYZp
03-18 11:11:59.894 11733-11733/we_pirate.one.com.onepiecewallpaper D/keys: -L7mjSINcbL_7N7BPgP1
03-18 11:11:59.895 11733-11733/we_pirate.one.com.onepiecewallpaper D/keys: -L7ms78xdhps8LPTfWnp
03-18 11:11:59.896 11733-11733/we_pirate.one.com.onepiecewallpaper D/keys: -L7msI6VC5jzOA9489mO
03-18 11:11:59.896 11733-11733/we_pirate.one.com.onepiecewallpaper D/keys: -L7msbEs4SZwlgxgLiTu
03-18 11:11:59.897 11733-11733/we_pirate.one.com.onepiecewallpaper D/keys: -L7nq2pAl9XEQwvT-ad9
03-18 11:11:59.898 11733-11733/we_pirate.one.com.onepiecewallpaper D/keys: -L7oCUSlOo4sz974sL1o
03-18 11:11:59.899 11733-11733/we_pirate.one.com.onepiecewallpaper D/keys: -L7oCZ8u-j2aXacDN3az
03-18 11:11:59.899 11733-11733/we_pirate.one.com.onepiecewallpaper D/keys: -L7oCbQfRSmv00AWaFWi
03-18 11:11:59.900 11733-11733/we_pirate.one.com.onepiecewallpaper D/keys: -L7oCfAfEecc_4NG-0Ir
03-18 11:11:59.901 11733-11733/we_pirate.one.com.onepiecewallpaper D/keys: -L7oCjU90zMgbcnvi-Cz
03-18 11:11:59.902 11733-11733/we_pirate.one.com.onepiecewallpaper D/keys: -L7oCp5fI5HpJs6cU_Fw
03-18 11:11:59.902 11733-11733/we_pirate.one.com.onepiecewallpaper D/keys: -L7oCvejzGo8e-QHtYWz
03-18 11:11:59.902 11733-11733/we_pirate.one.com.onepiecewallpaper D/list: 13

Вы говорите о limitToFirst, но в коде назовите limitToLast. Но помимо этого, это должно изначально вернуть шестерых детей. Можете ли вы записать ключи от предметов, которые вы получаете, и добавить их вывод к вопросу. Если вы затем также покажете запрашиваемый JSON (в виде текста, пожалуйста, без скриншотов), у нас будет больше шансов увидеть, что происходит. Вы можете получить JSON в виде текста, щелкнув ссылку «Экспорт JSON» в вашем Консоль базы данных Firebase.

Frank van Puffelen 18.03.2018 06:31

@FrankvanPuffelen проверить

user6556461 18.03.2018 06:44

Я предполагаю, что ваша схема firebase выглядит примерно так: `/ / wallpapers / wallpapers / {id} / wallpaper1 / wallpapers / {id} / wallpaper2`, тогда, возможно, вы наблюдаете за /, попробуйте изменить базу данных Ссылка на обои FirebaseDatabase.getInstance().getReference().child("wallpap‌​ers"), а затем в onChildAdded используйте dataSnapshot.getValue(WallpaperInfo.class); вместо цикла for.

Tran Dinh Tung 18.03.2018 06:56

@TranDinhTung моя схема проста в корневом узле, у меня только одна стена узла, а остальные - это push-идентификаторы внутри стен и данные как дочерние внутри push-идентификаторов.

user6556461 18.03.2018 07:02

Затем вам нужно изменить databaseReference = FirebaseDatabase.getInstance().getReference(); на databaseReference = FirebaseDatabase.getInstance().getReference().child("walls") и изменить слушателя, как в моем комментарии выше, он должен работать

Tran Dinh Tung 18.03.2018 07:05

@TranDinhTung Мне нужен весь день, если удалить цикл for, он даст только один объект

user6556461 18.03.2018 07:07

он даст вам 6 предметов в 6 раз, когда firebase вызовет ваш onChildAdded, как в вашем лимите. В противном случае, если вы хотите все сразу, используйте addListenerForSingleValueEvent или addValueEventListener вместо addChildEventListener.

Tran Dinh Tung 18.03.2018 07:10

@TranDinhTung хорошо, да, я думал, что получу только один объект в onChildAdded, но у меня 6. Спасибо, чувак.

user6556461 18.03.2018 07:17

Замечательно, не могли бы вы отметить мой ответ, если он поможет? Спасибо!

Tran Dinh Tung 18.03.2018 07:22
0
9
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно изменить

databaseReference = FirebaseDatabase.getInstance().getReference(); 

кому: databaseReference = FirebaseDatabase.getInstance().getReference().child("walls") тогда в onChildAdded используйте dataSnapshot.getValue(WallpaperInfo.class); вместо цикла for.

Другие вопросы по теме