0

I create an app which contain recyclerview and I add data in recyclerview arrayList from alertDilog and edit,delete data from AlertDilog according to the user click .It works properly but when I connect my app to firebase Database, my app doesn't work properly.

Recyclerview Adapter:

public class recyclerviewadapter extends RecyclerView.Adapter<recyclerviewadapter.Viewholder> {
        ArrayList<customitem> datalist;
        vonclick mclick;

        @NonNull
        @Override
        public Viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerviewexdesign,parent,false);
            return new Viewholder(v,mclick);
        }

        public recyclerviewadapter(ArrayList<customitem> datalist) {
            this.datalist = datalist;
        }

        @Override
        public void onBindViewHolder(@NonNull Viewholder holder, int position) {
            customitem n = datalist.get(position);
            holder.productname.setText(n.getproductname());


        }

        @Override
        public int getItemCount() {
            return datalist.size();
        }

        public class Viewholder extends RecyclerView.ViewHolder {
            TextView productname;
            public Viewholder(@NonNull View itemView, final vonclick listener) {
                super(itemView);
                productname = itemView.findViewById(R.id.titleid);

                itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (listener!=null){
                            int possition =getAdapterPosition();
                            if (possition !=RecyclerView.NO_POSITION){
                                listener.cclick(possition);

                            }

                        }


                    }
                });
            }
        }
        public interface vonclick{
            void cclick(int possition);

        }
        public void recyclerviewonclicl(vonclick possition){
            mclick=possition;
        }
    }

and item class:

public class customitem {
    String productname,size,price,box;
    int kg;
    public customitem(){

    }

    public customitem(String productname, String size,String price,String box,int kg) {
        this.productname = productname;
        this.size = size;
        this.price = price;
        this.box = box;
        this.kg = kg;
    }

    public String getproductname() {
        return productname;
    }

    public void setproductname(String productname) {
        this.productname = productname;
    }

    public String getsize() {
        return size;
    }

    public void setsize(String size) {
        this.size = size;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public String getBox() {
        return box;
    }

    public void setBox(String box) {
        this.box = box;
    }

    public int getKg() {
        return kg;
    }

    public void setKg(int kg) {
        this.kg = kg;
    }
}

last one main class:

public class addproduct extends AppCompatActivity {
    RecyclerView recyclerView;
    ArrayList<customitem> datalist =new ArrayList<customitem>();
    FirebaseDatabase mdatabase;
    DatabaseReference mreference;

    EditText productname,price,size,b2;
    Spinner sizespinner;
    Button okbutton;
    View mview;
    ImageView cancel;
    AlertDialog d;
    AlertDialog.Builder alert;
    recyclerviewadapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_addproduct);
        getSupportActionBar().setTitle("Add product");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        mdatabase = FirebaseDatabase.getInstance();
        //?????????????????????? my firebase referance ????????????
        mreference = mdatabase.getReference().child("product");
        mreference.keepSynced(true);



        recyclerView = findViewById(R.id.recyclerviewid);



        buildrecyclerview();

        //mreference.child("product").setValue(datalist);






    }

    public void buildrecyclerview(){
        adapter = new recyclerviewadapter(datalist);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new GridLayoutManager(this,4));
        recyclerView.setAdapter(adapter);
        mreference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot dataSnapshot1:dataSnapshot.getChildren()){
                    customitem j =dataSnapshot1.getValue(customitem.class);
                    datalist.add(j);

                }
                adapter.notifyDataSetChanged();

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

        adapter.recyclerviewonclicl(new recyclerviewadapter.vonclick() {
            @Override
            public void cclick(final int possition) {

                //?????????????? alert dilog two for delete and update data ????????????????
                AlertDialog.Builder bl = new AlertDialog.Builder(addproduct.this);
                View v = getLayoutInflater().inflate(R.layout.manageralertdilogtwo,null);
                bl.setView(v);
                d=bl.create();
                d.show();
                final EditText productname2 = v.findViewById(R.id.productname2);
                final EditText size2 = v.findViewById(R.id.packsizeid2);
                final EditText price2 = v.findViewById(R.id.priceid2);
                final EditText box2 = v.findViewById(R.id.Box2);
                Button okbtn = v.findViewById(R.id.okbuttonid2);
                Button dltbtn = v.findViewById(R.id.deleteid);
                ImageView cross =v.findViewById(R.id.cancelid2);
                final Spinner sp =v.findViewById(R.id.spinnerid2);
                //String pn = datalist.get(possition).getproductname();

                productname2.setText(datalist.get(possition).getproductname());
                size2.setText(datalist.get(possition).getsize());
                price2.setText(datalist.get(possition).getPrice());
                box2.setText(datalist.get(possition).getBox());
                sp.setSelection(datalist.get(possition).getKg());
                cross.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        d.dismiss();
                    }
                });
                okbtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        //?????????????? update data accroding user selectiong  ??????????????


                       //datalist.get(possition).setproductname(productname2.getText().toString());
                       //datalist.get(possition).setPrice(price2.getText().toString());
                       //datalist.get(possition).setsize(size2.getText().toString());
                       //datalist.get(possition).setBox(box2.getText().toString());
                       //datalist.get(possition).setKg(sp.getSelectedItemPosition());
                       customitem m = new customitem(productname2.getText().toString(),size2.getText().toString()
                       ,price2.getText().toString(),box2.getText().toString(),sp.getSelectedItemPosition());

                       mreference.child(String.valueOf(datalist.get(possition))).setValue(m);

                        d.dismiss();
                    }
                });
                dltbtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        //???????????????? delete data from recycler view accroding user selection ???????????
                        //datalist.remove(possition);
                        mreference.child(String.valueOf(datalist.get(possition))).removeValue();

                       // adapter.notifyDataSetChanged();
                        d.dismiss();
                    }
                });




            }
        });

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.addproductmenu,menu);
        return true;

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.addproduct:
                buildalert();
                break;
            case R.id.seedetails:
                Intent n  = new Intent(addproduct.this,managermain.class);
                startActivity(n);
                break;

        }
        return super.onOptionsItemSelected(item);
    }
    public void buildalert(){
        //?????? alert dilog one for take data ???????????????
          alert = new AlertDialog.Builder(addproduct.this);
          mview = getLayoutInflater().inflate(R.layout.manageralertalertdilog,null);
          productname = mview.findViewById(R.id.productname);
          price = mview.findViewById(R.id.priceid);
          alert.setCancelable(true);

          size = mview.findViewById(R.id.packsizeid);
          cancel = mview.findViewById(R.id.cancelid);
          sizespinner = mview.findViewById(R.id.spinnerid);
          okbutton = mview.findViewById(R.id.okbuttonid);
          b2 = mview.findViewById(R.id.Box);
          alert.setView(mview);


        final AlertDialog dl = alert.create();
        dl.show();
        cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dl.dismiss();
            }
        });
        okbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (productnamem() && sizem()){
                    //add data from alert dilog


                    String productnm = productname.getText().toString();
                    String pricec = price.getText().toString();

                    String sizee = size.getText().toString();
                    int kg = sizespinner.getSelectedItemPosition();
                    String box= b2.getText().toString();

                  //?? add data in recyclerview from alert dilog ???????????????


                    //datalist.add(new customitem(productnm,sizee,pricec,box,kg));
                    customitem n = new customitem(productnm,sizee,pricec,box,kg);
                    mreference.child(String.valueOf(datalist.size())).setValue(n);


                    //adapter.notifyDataSetChanged();
                    //mreference.setValue(datalist);
                    dl.dismiss();




                }

            }
        });





    }
    public boolean productnamem(){
        if (productname.getText().toString().trim().isEmpty()){
            productname.setError("Please fill it");
            productname.setFocusable(true);
            return false;
        }
        else {
            return true;
        }

    }

    public boolean sizem(){
        if (size.getText().toString().trim().isEmpty()){
            size.setError("Please fill it");
            size.setFocusable(true);
            return false;
        }
        else {
            return true;
        }
    }

}
Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
  • Check **[this](https://stackoverflow.com/questions/49277797/how-to-display-data-from-firestore-in-a-recyclerview-with-android/49277842)** out. – Alex Mamo Nov 08 '19 at 10:39
  • Hey Tanvir. It's going to be hard to help on this, given the scope of what you shared. You'll find that Stack Overflow can be most helpful when you make it easy for folks to help. To do that: run the code in a debugger, set breakpoints, step through it, and see what it exactly does, and where that doesn't match with what you expected. Then reduce the scope of your question to a minimum, and be explicit about what you expected. For example: "It doesn't work properly" is very hard to help with, but "neither my `onDataChange` nor my `onCancelled` gets called" is a lot more concrete. – Frank van Puffelen Nov 08 '19 at 14:51

0 Answers0