为了账号安全,请及时绑定邮箱和手机立即绑定

Firebase removeValue() 函数未删除正确的值

Firebase removeValue() 函数未删除正确的值

慕田峪9158850 2023-09-06 15:02:41
我正在努力向我的应用程序添加编辑和删除功能。编辑功能工作正常,但我的删除功能并不总是删除正确的值。删除功能未按预期工作的情况:当我添加新的数据节点时(在我的应用程序中是新的供应商。)当我编辑某个值时,最后编辑的值将被删除,而不是所选的值。启动应用程序时,仅删除其中一项就会删除整个“供应商”。必须单击删除按钮两次才能删除项目。这是我的数据库的结构:供应商>>>=============> 自动生成密钥(例如-LpmoJ8DjCvF23I2ymVg)=================================================== =====> 供应商名称=================================================== =====> 供应商_地址=================================================== =====> 供应商_电话号码=================================================== =====> 供应商_电子邮件为了删除一个值,我获取该项目的自动生成的键,并将其用作删除该键的整个节点的参考。这在我的编辑功能中工作得很好,但在我的删除功能中却不起作用。我认为它必须与 onDataChange 做一些事情,但我不确定。注意:这些项目位于recyclerView中,用户可以随时编辑或删除它们。我尝试过移动 onDatachange 方法,将removeValue() 函数移动到不同的位置,并在使用它之前在 TextView 中设置键,以确保它是正确的键,但由于某种原因它不起作用有意删除其他未选择的项目。我已经被这个问题困扰了三天,因为我是这种编程的初学者,这是我的第一个完整的应用程序。如果您需要更多代码,我可以根据需要发布尽可能多的代码。任何帮助是极大的赞赏 :)。
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

我还没有测试过代码,尝试掌握逻辑。有任何疑问欢迎


btnMenuDelete.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            final AlertDialog.Builder builder = new AlertDialog.Builder(SupplierMaintenance.this);

            builder.setTitle("DELETE Supplier");

            builder.setMessage("You are about to delete the selected supplier. Continue?");

            builder.setCancelable(false);

            builder.setNegativeButton("Yes", new DialogInterface.OnClickListener() {


                @Override

                public void onClick(DialogInterface dialog, int which) {


                    //DELETE METHOD

                    databaseSupp = FirebaseDatabase.getInstance().getReference("SUPPLIERS");

                    final DatabaseReference mDatabase2 = databaseSupp;


                    mDatabase2.addListenerForSingleValueEvent(new ValueEventListener() {

                        @Override

                        public void onDataChange(@NonNull final DataSnapshot dataSnapshot2) {


                            for (final DataSnapshot snapshot : dataSnapshot2.getChildren()) {

                                if (snapshot.child("Supplier_Name").getValue(String.class).equals(suppName.getText().toString())) {

                                    deletekey = snapshot.getKey().toString();

                                    keyholder.setText(deletekey);

               mDatabase2.child(keyholder.getText().toString()).removeValue();  

                                     return;

                                }

                            }

                        }

                        @Override

                        public void onCancelled(@NonNull DatabaseError databaseError) {


                        }

                    });

                }

            });


            builder.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {

                @Override

                public void onClick(DialogInterface dialog, int which) {

                }

            });

            builder.show();

            //DELETE METHOD END

        }

    });

我希望供应商名称是唯一的


查看完整回答
反对 回复 2023-09-06
  • 1 回答
  • 0 关注
  • 56 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信