0

У меня есть long переменные и я хочу заполнять RecyclerView объектами и количество объектов должно равняться значению long для этого я сделал легкий цикл

for (int i = 0; i < petiarochkaAmount100; i++) {
                couponss.add(new Coupons(R.drawable.petiarochka));
            }

Но объекты не добавляются.

Вот весь код

public class LibraryActivity extends BaseActivity {
private static final String TAG = "LibraryActivity";





List<Coupons> couponss = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_library);
    setInitialData();

    RecyclerView recyclerView = findViewById(R.id.list);
    RecyclerAdapter adapter = new RecyclerAdapter(this,couponss);
    recyclerView.setAdapter(adapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));











}
public void setInitialData(){
    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference uidRef = rootRef.child("users").child(getUid()).child("coupons");


    ValueEventListener valueEventListener = new ValueEventListener() {
        @SuppressWarnings("ConstantConditions")
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {


            long petiarochkaAmount100 = dataSnapshot.child("petiarochka").child("petiarochka100").getValue(Long.class);
            long petiarochkaAmount300 = dataSnapshot.child("petiarochka").child("petiarochka300").getValue(Long.class);
            long petiarochkaAmount500 = dataSnapshot.child("petiarochka").child("petiarochka500").getValue(Long.class);
            long lentaAmount100 = dataSnapshot.child("lenta").child("lenta100").getValue(Long.class);
            long lentaAmount300 = dataSnapshot.child("lenta").child("lenta300").getValue(Long.class);
            long lentaAmount500 = dataSnapshot.child("lenta").child("lenta500").getValue(Long.class);

            Log.v("JAJJAJAJAJA",""+petiarochkaAmount100);
            for (int i = 0; i < petiarochkaAmount100; i++) {
                couponss.add(new Coupons(R.drawable.petiarochka));
            }


        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
        }
    };
    uidRef.addValueEventListener(valueEventListener);

}`
  • после того, как вы получили новые данные, их надо передать в адаптер и уведомить его, что данные обновились или использовать support.v4.ListAdapter, чтобы данные обновлялись автоматически при их изменении – pavlofff May 18 '19 at 12:00
  • Спасибо pavlofff.Вы не могли бы сказать где я могу прочитать про передачу и уведомления адаптера? – georgiy110802 May 18 '19 at 12:04
  • @pavlofff пожалуйста – georgiy110802 May 18 '19 at 12:14
  • https://ru.stackoverflow.com/a/553996/177345 – pavlofff May 18 '19 at 12:57
  • в вашем случае в списке ничего не отображается, потому что у вас происходит асинхронный сетевой запрос (параллельное выполнение, пока одна чать кода получает данные из сети , основной код выполняется дальше). На выполнение этого запроса требуется гораздо больше времени, чем компилятору выполнить несколько строк кода и к тому моменту, как выполняется строка RecyclerAdapter adapter = new RecyclerAdapter(this,couponss); данные еще не попали в массив couponss, соответственно в списке ничего не отображается, он еще пустой. – pavlofff May 18 '19 at 16:35
  • вам нужно либо обновлять адаптер по примеру, как в ссылке выше, после того, как данные получены, либо создавать сам список и подключать к нему адаптер уже после получения данных (если только один запрос и список больше не меняется). Гарантированное место, когда данные уже получены - в конце колбэка onDataChange() – pavlofff May 18 '19 at 16:37
  • @pavlofff я просто при каждом изменении чищу список и запускаю цикл с notifyDatasetchanged – georgiy110802 May 18 '19 at 18:46
  • @pavlofff и все работает – georgiy110802 May 18 '19 at 18:46

1 Answers1

0

В данном цикле

for (int i = 0; i < petiarochkaAmount100; i++) {
            couponss.add(new Coupons(R.drawable.petiarochka));

Надо оповещать адаптер, следовательно цикл должен выглядеть так

for (int i = 0; i < petiarochkaAmount300; i++) {

                couponss.add(new Coupons(R.drawable.petiarochka));
                recyclerView.getAdapter().notifyDataSetChanged();

            }

И тогда все будет работать