Firebase FirebaseRecyclerAdaptor из Firebase-UI не возвращает данные

Я использую FirebaseRecyclerAdaptor, но не получаю данные из базы данных.

Сначала я создаю запрос:

Query query = FirebaseDatabase.getInstance()
                .getReference()
                .child("items");

Затем я создаю объект FirebaseRecyclerOptions, но когда я регистрирую моментальный снимок параметров, я получаю нулевой или пустой массив.

FirebaseRecyclerOptions<Item> options =
                new FirebaseRecyclerOptions.Builder<Item>()
                        .setQuery(query, new SnapshotParser<Item>() {
                            @NonNull
                            @Override
                            public Item parseSnapshot(@NonNull DataSnapshot snapshot) {
                                return snapshot.getValue(Item.class);
                            }
                        })
                        .build();
    Log.e("Ref", String.valueOf(options.getSnapshots()));

Затем я инициализирую свой адаптер:

adapter = new FirebaseRecyclerAdapter<Item, ItemsViewHolder>(options) {

            @Override
            protected void onBindViewHolder(@NonNull ItemsViewHolder holder, int position, @NonNull Item model) {
                holder.tv_item_price.setText(Integer.toString(model.getItemPrice()));
                holder.tv_item_description.setText(model.getItemDescription());
                holder.tv_item_name.setText(model.getItemName());

                Picasso.with(getContext())
                        .load(model.getImage())
                        .placeholder(R.drawable.placeholder)
                        .into(holder.img_image);

                holder.btn_select.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        int total = Integer.parseInt(((MainActivity)getActivity()).cart_price.getText().toString()) + model.getItemPrice();
                        ((MainActivity)getActivity()).cart_price.setText(Integer.toString(total));

                        selectedItems.add(model);

                        Log.e("00", Integer.toString(selectedItems.size()));
                    }
                });
            }

            @NonNull
            @Override
            public ItemsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.single_item_view, parent, false);

                return new ItemsViewHolder(view);
            }

        };

adaptor.notifyDataSetChanged();

Почему я получаю снимки в виде пустого массива?

Обратите внимание, что когда я использую "addValueEventListener", он работает хорошо.

//        ref.addValueEventListener(new ValueEventListener() {
//            @Override
//            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//                items.clear();
//
//                for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
//                    Item newItem = snapshot.getValue(Item.class);
//                    items.add(newItem);
//                    Log.i("Mysnapshot", snapshot.toString());
//
//                }
//
//                    adaptor.notifyDataSetChanged();
//            }
//
//            @Override
//            public void onCancelled(@NonNull DatabaseError databaseError) {
//
//            }
//        });

Firebase FirebaseRecyclerAdaptor из Firebase-UI не возвращает данные

My Firebase Database Structure is as shown here

My Java Class is shown below........

public class Item implements Parcelable {
        private String itemName;
        private String itemDescription;
        private String itemUid;
        private int itemPrice;
        private int itemCount;
        private String image;

        public Item() {}  // Needed for Firebase

        public Item(String itemName, String itemDescription, String itemUid, int itemPrice, int itemCount, String image) {
            this.itemName = itemName;
            this.itemDescription = itemDescription;
            this.itemUid = itemUid;
            this.itemPrice = itemPrice;
            this.itemCount = itemCount;
            this.image = image;
        }

        protected Item(Parcel in) {
            itemName = in.readString();
            itemDescription = in.readString();
            itemUid = in.readString();
            itemPrice = in.readInt();
            itemCount = in.readInt();
            image = in.readString();
        }

        public static final Creator<Item> CREATOR = new Creator<Item>() {
            @Override
            public Item createFromParcel(Parcel in) {
                return new Item(in);
            }

            @Override
            public Item[] newArray(int size) {
                return new Item[size];
            }
        };

        public String getImage() {
            return image;
        }

        public void setImage(String image) {
            this.image = image;
        }

        public String getItemName() {
            return itemName;
        }

        public void setItemName(String itemName) {
            this.itemName = itemName;
        }

        public String getItemDescription() {
            return itemDescription;
        }

        public void setItemDescription(String itemDescription) {
            this.itemDescription = itemDescription;
        }

        public String getItemUid() {
            return itemUid;
        }

        public void setItemUid(String itemUid) {
            this.itemUid = itemUid;
        }

        public int getItemPrice() {
            return itemPrice;
        }

        public void setItemPrice(int itemPrice) {
            this.itemPrice = itemPrice;
        }

        public int getItemCount() {
            return itemCount;
        }

        public void setItemCount(int itemCount) {
            this.itemCount = itemCount;
        }

        @Override
        public int describeContents() {
            return 0;
        }

        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(itemName);
            dest.writeString(itemDescription);
            dest.writeString(itemUid);
            dest.writeInt(itemPrice);
            dest.writeInt(itemCount);
            dest.writeString(image);
        }
    }

Вы можете опубликовать свой логарифм?

olajide 05.08.2018 15:19

Должен ли я фильтровать ошибки или что-то в этом роде?

Wycliffe Kipkogei 05.08.2018 15:21

Да только то, что можно прочитать ошибку

olajide 05.08.2018 15:22
i.stack.imgur.com/63wTQ.png
Wycliffe Kipkogei 05.08.2018 15:39

вы можете показать нам Item.class и структуру вашей базы данных? Благодарность

Gastón Saillén 05.08.2018 16:11
1
5
527
1

Ответы 1

Проблема в вашем коде в том, что вы используете FirebaseRecyclerAdapter, но не прислушиваетесь к изменениям. Чтобы решить эту проблему, добавьте следующие строки кода в методы onStart() и onStop (), например:

@Override
protected void onStart() {
    super.onStart();
    adapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();
    if (adapter != null) {
        adapter.stopListening();
    }
}

Это довольно частая ошибка, которую допускают разработчики, потому что в более ранних версиях такой практики не было.

Я не работаю, хорошо, но что за поведение? У вас есть ошибка? Пожалуйста, поделитесь также содержимым вашего класса Item.

Alex Mamo 05.08.2018 16:13

нам нужна структура базы данных из OP и посмотрим, могут ли переменные из item.class отличаться от переменных в базе данных

Gastón Saillén 05.08.2018 19:52

Как вас просил Гастон, покажите, пожалуйста, содержание вашего класса Item, com?

Alex Mamo 06.08.2018 12:20

Всем привет, благодарен за заботу. Я только что предоставил Pojo и изображение для структуры БД.

Wycliffe Kipkogei 06.08.2018 19:47

Последняя строка в вашем logcat: []. Из какого журнала приходит оператор?

Alex Mamo 06.08.2018 19:52

Алекс. Наконец-то я нашел решение, я использовал другой подход. Хотя эта официальная документация от Google мне удалось, не меняя Pojo. github.com/firebase/FirebaseUI-Android/blob/master/app/src/m‌ ain /…

Wycliffe Kipkogei 06.08.2018 20:07

Другой подход какой есть?

Alex Mamo 06.08.2018 20:08

Я до сих пор не понимаю, почему мой первый подход не сработал, но спасибо всем

Wycliffe Kipkogei 06.08.2018 20:08

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