Я не знаю, почему мой 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
@FrankvanPuffelen проверить
Я предполагаю, что ваша схема firebase выглядит примерно так: `/ / wallpapers / wallpapers / {id} / wallpaper1 / wallpapers / {id} / wallpaper2`, тогда, возможно, вы наблюдаете за /, попробуйте изменить базу данных Ссылка на обои FirebaseDatabase.getInstance().getReference().child("wallpapers"), а затем в onChildAdded используйте dataSnapshot.getValue(WallpaperInfo.class); вместо цикла for.
@TranDinhTung моя схема проста в корневом узле, у меня только одна стена узла, а остальные - это push-идентификаторы внутри стен и данные как дочерние внутри push-идентификаторов.
Затем вам нужно изменить databaseReference = FirebaseDatabase.getInstance().getReference(); на databaseReference = FirebaseDatabase.getInstance().getReference().child("walls") и изменить слушателя, как в моем комментарии выше, он должен работать
@TranDinhTung Мне нужен весь день, если удалить цикл for, он даст только один объект
он даст вам 6 предметов в 6 раз, когда firebase вызовет ваш onChildAdded, как в вашем лимите. В противном случае, если вы хотите все сразу, используйте addListenerForSingleValueEvent или addValueEventListener вместо addChildEventListener.
@TranDinhTung хорошо, да, я думал, что получу только один объект в onChildAdded, но у меня 6. Спасибо, чувак.
Замечательно, не могли бы вы отметить мой ответ, если он поможет? Спасибо!
Вам нужно изменить
databaseReference = FirebaseDatabase.getInstance().getReference();
кому: databaseReference = FirebaseDatabase.getInstance().getReference().child("walls")
тогда в onChildAdded используйте dataSnapshot.getValue(WallpaperInfo.class); вместо цикла for.
Вы говорите о
limitToFirst, но в коде назовитеlimitToLast. Но помимо этого, это должно изначально вернуть шестерых детей. Можете ли вы записать ключи от предметов, которые вы получаете, и добавить их вывод к вопросу. Если вы затем также покажете запрашиваемый JSON (в виде текста, пожалуйста, без скриншотов), у нас будет больше шансов увидеть, что происходит. Вы можете получить JSON в виде текста, щелкнув ссылку «Экспорт JSON» в вашем Консоль базы данных Firebase.