@LilSem

Как исправить вылет приложения при добавлении данных в Firebase?

У меня есть два фрагмента, один из них корзина и на нем стоит AddChildEventListener, то есть он постоянно слушает состояние БД и при добавлении данных в корзину, то есть со второго фрагмента, фрагмент корзины сразу пытается обновить список, а из - за того что за это время успевает придти только два поля в базу данных, вместо восьми, слушатель не может загрузить несуществующие данные и приложение вылетает. Как решить данный вопрос? Листинги ниже

Добавление в базу:

String key = mReference.child("basket").push().getKey();
    mReference.child("basket").child(key).child("dishId").setValue(mList.get(position).id);
    mReference.child("basket").child(key).child("restaurantId").setValue(mList.get(position).restaurantId);
    mReference.child("basket").child(key).child("userId").setValue(userRef);
    mReference.child("basket").child(key).child("weight").setValue(mList.get(position).weight);
    mReference.child("basket").child(key).child("title").setValue(mList.get(position).title);
    mReference.child("basket").child(key).child("composition").setValue(mList.get(position).composition);
    mReference.child("basket").child(key).child("price").setValue(mList.get(position).price);


Слушатель:

private void updateList() {

    mReference.child("basket").addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            mList.add(dataSnapshot.getValue(Basket.class));
            mAdapter.notifyDataSetChanged();
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            Basket model = dataSnapshot.getValue(Basket.class);
            int index = getItemIndex(model);
            mList.set(index, model);
            mAdapter.notifyItemChanged(index);

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
            Basket model = dataSnapshot.getValue(Basket.class);
            int index = getItemIndex(model);

            mList.remove(index);
            mAdapter.notifyItemRemoved(index);
        }


        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
}
  • Вопрос задан
  • 204 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы