Проблема с получением данных Firebase в студии android - PullRequest
0 голосов
/ 07 августа 2020

Я хочу получить данные из firebase и отобразить их в режиме повторного использования. Я указал правильный путь для получения данных. Но есть проблема, которую я не могу найти.

Этот код, в котором я указал дочерний адрес.

final DatabaseReference nm= FirebaseDatabase.getInstance().getReference("Cart")
            .child("Admin view")
            .child(phoneNo)
            .child("Products");

    nm.addValueEventListener(new ValueEventListener()
    {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists())
            {
                for (DataSnapshot npsnapshot : dataSnapshot.getChildren())
                {
                    cart l=npsnapshot.getValue(cart.class);
                    listData.add(l);

                }

                adapter = new cartAdapterr(listData, AdminShowOrderProductsActivity.this);
                rv.setAdapter(adapter);

            }
            else
            {

              Toast.makeText(AdminShowOrderProductsActivity.this, "No Data for: " + phoneNo, Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });  

Скриншот

Это скриншот моей базы данных и эмулятора firebase. номер телефона в всплывающем сообщении, который также присутствует в базе данных firebase. на узле Номер телефона правильный, но показывает ошибку.

1 Ответ

0 голосов
/ 07 августа 2020

Вы работаете правильно, но у вас есть ошибка. Когда данные изменяются в Firebase, создается new cartAdapterr и эта операция неверна.

Сначала необходимо создать Адаптер , а затем отправьте данные.

например, вы можете создать его onCreate и создать метод внутри адаптера, который получает List <Cart>, как показано ниже:

       @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
    
            //..

            adapter = new cartAdapterr(this);
            loadDataFirebase():
    
    }


        void loadDataFirebase(){


         final DatabaseReference nm= FirebaseDatabase.getInstance().getReference("Cart")
            .child("Admin view")
            .child(phoneNo)
            .child("Products");

    nm.addValueEventListener(new ValueEventListener()
    {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists())
            {
                for (DataSnapshot npsnapshot : dataSnapshot.getChildren())
                {
                    cart l=npsnapshot.getValue(cart.class);
                    listData.add(l);

                }

                adapter.setDataList(listData);

            }
            else
            {

              Toast.makeText(AdminShowOrderProductsActivity.this, "No Data for: " + phoneNo, Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    }); 
}

В адаптере вы должны создать это setDataList (List<Cart> cartItems):

 public void setDataList (List<Cart> cartItems ) {

        this.cartItems = cartItems;
        
        notifyDataSetChanged();
    }
...