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

我正在努力向我的应用程序添加编辑和删除功能。编辑功能工作正常,但我的删除功能并不总是删除正确的值。

删除功能未按预期工作的情况:

  • 当我添加新的数据节点时(在我的应用程序中是新的供应商。)

  • 当我编辑某个值时,最后编辑的值将被删除,而不是所选的值。

  • 启动应用程序时,仅删除其中一项就会删除整个“供应商”。

  • 必须单击删除按钮两次才能删除项目。


这是我的数据库的结构:

供应商>>>

=============> 自动生成密钥(例如-LpmoJ8DjCvF23I2ymVg)

=================================================== =====> 供应商名称

=================================================== =====> 供应商_地址

=================================================== =====> 供应商_电话号码

=================================================== =====> 供应商_电子邮件


为了删除一个值,我获取该项目的自动生成的键,并将其用作删除该键的整个节点的参考。这在我的编辑功能中工作得很好,但在我的删除功能中却不起作用。

我认为它必须与 onDataChange 做一些事情,但我不确定。

注意:这些项目位于recyclerView中,用户可以随时编辑或删除它们。

我尝试过移动 onDatachange 方法,将removeValue() 函数移动到不同的位置,并在使用它之前在 TextView 中设置键,以确保它是正确的键,但由于某种原因它不起作用有意删除其他未选择的项目。

我已经被这个问题困扰了三天,因为我是这种编程的初学者,这是我的第一个完整的应用程序。

如果您需要更多代码,我可以根据需要发布尽可能多的代码。

任何帮助是极大的赞赏 :)。


慕田峪9158850
浏览 59回答 1
1回答

www说

我还没有测试过代码,尝试掌握逻辑。有任何疑问欢迎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        }    });我希望供应商名称是唯一的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java