Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将recyclerview连接到firebase数据库插入、更新和删除数据_Java_Android_Firebase_Firebase Realtime Database_Android Recyclerview - Fatal编程技术网

Java 如何将recyclerview连接到firebase数据库插入、更新和删除数据

Java 如何将recyclerview连接到firebase数据库插入、更新和删除数据,java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,我创建了一个包含recyclerview的应用程序,我从alertDilog在recyclerview数组列表中添加数据,并根据用户的点击编辑、删除alertDilog中的数据。它工作正常,但当我将我的应用程序连接到firebase数据库时,我的应用程序工作不正常 Recyclerview适配器: public class recyclerviewadapter extends RecyclerView.Adapter<recyclerviewadapter.Viewholder>

我创建了一个包含
recyclerview
的应用程序,我从
alertDilog
recyclerview数组列表中添加数据,并根据用户的点击编辑、删除
alertDilog
中的数据。它工作正常,但当我将我的应用程序连接到
firebase数据库时,我的应用程序工作不正常

Recyclerview适配器:

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;
        }
    }
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;
    }
}
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;
        }
    }

}
最后一个主类:

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;
        }
    }
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;
    }
}
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;
        }
    }

}
公共类addproduct扩展了AppCompatActivity{
回收视图回收视图;
ArrayList datalist=新的ArrayList();
Firebase数据库mdatabase;
数据库参考文献;
EditText产品名称、价格、大小、b2;
纺纱机;
按钮OK按钮;
视图视图;
图像视图取消;
警惕的对话;
AlertDialog.Builder警报;
循环水适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u addproduct);
getSupportActionBar().setTitle(“添加产品”);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mdatabase=FirebaseDatabase.getInstance();
//我的火基参考资料????????????
mrreference=mdatabase.getReference().child(“产品”);
mreference.keepSynced(true);
recyclerView=findViewById(R.id.recyclerviewid);
buildrecyclerview();
//mreference.child(“产品”).setValue(数据列表);
}
公共void buildrecyclerview(){
适配器=新的RecycleServiceAdapter(数据列表);
recyclerView.setHasFixedSize(true);
setLayoutManager(新的GridLayoutManager(this,4));
recyclerView.setAdapter(适配器);
mreference.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){
customitem j=dataSnapshot1.getValue(customitem.class);
数据表.添加(j);
}
adapter.notifyDataSetChanged();
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
adapter.RecycleServiceOnClicl(新的RecycleServiceAdapter.vonclick(){
@凌驾
公共无效点击(最终整数占有){
//提醒dilog 2删除和更新数据????????????????
AlertDialog.Builder bl=新建AlertDialog.Builder(addproduct.this);
视图v=getLayoutInflater().inflate(R.layout.manageralertdilogtwo,null);
bl.setView(v);
d=bl.create();
d、 show();
final EditText productname2=v.findViewById(R.id.productname2);
最终编辑文本大小2=v.findviewbyd(R.id.packsizeid2);
最终编辑文本价格2=v.findviewbyd(R.id.priceid2);
最终编辑文本框2=v.findviewbyd(R.id.box2);
按钮okbtn=v.findViewById(R.id.OKButonid2);
按钮dltbtn=v.findViewById(R.id.deleteid);
ImageView cross=v.findViewById(R.id.cancelid2);
最终喷丝器sp=v.findViewById(R.id.喷丝器ID2);
//字符串pn=datalist.get(position).getproductname();
productname2.setText(datalist.get(position.getproductname());
setText(datalist.get(position.getsize());
price2.setText(datalist.get(position.getPrice());
setText(datalist.get(position.getBox());
sp.setSelection(datalist.get(position.getKg());
cross.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
d、 解雇();
}
});
okbtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//根据用户选择更新数据??????????????
//datalist.get(position.setproductname(productname2.getText().toString());
//datalist.get(position.setPrice(price2.getText().toString());
//datalist.get(position).setsize(size2.getText().toString());
//datalist.get(position.setBox(box2.getText().toString());
//get(position).setKg(sp.getSelectedItemPosition());
customitem m=新的customitem(productname2.getText().toString(),size2.getText().toString())
,price2.getText().toString(),box2.getText().toString(),sp.getSelectedItemPosition());
mrreference.child(String.valueOf(datalist.get(position))).setValue(m);
d、 解雇();
}
});
dltbtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//根据用户选择从回收器视图中删除数据???????????
//数据列表。删除(占有);
mrreference.child(String.valueOf(datalist.get(position))).removeValue();
//adapter.notifyDataSetChanged();
d、 解雇();
}
});
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.addproductmenu,menu);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){