如何从 ListView 中删除 Firebase Android 中的特定节点

Posted

技术标签:

【中文标题】如何从 ListView 中删除 Firebase Android 中的特定节点【英文标题】:How to Delete Specific Node in Firebase Android from ListView 【发布时间】:2020-01-29 23:56:24 【问题描述】:

我遇到了问题。我想删除选定的 ListView 和引用键号(20191、20192、...如突出显示)及其子级的特定节点。 here's my Database Structure

这是我的 OnItemClickListener,重点是案例 2 以删除 ListView

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
            @Override
            public void onItemClick(final AdapterView<?> parent, View view, final int position, long id) 
                final Aduanclass aduanclass = aduanclassList.get(position);
//                selectedPosition = position;
//                itemSelected = true;
//                final Dialog dialog = new Dialog(MainActivity.this);
//                    dialog.setContentView(R.layout.activity_common_detail_aduan);
//                                dialog.setTitle("Pilih Aksi");
//                dialog.show();
//                final String Selection=arrayList.get(position);

                final CharSequence [] dialog ="Lihat Detail", "Ubah", "Hapus";
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("Pilihan");

                builder.setItems(dialog, new DialogInterface.OnClickListener() 
                    @Override
                    public void onClick(DialogInterface dialog, int which) 


                        switch (which)
                            case 0:
                                Intent intentCommondetail= new Intent(MainActivity.this,CommonDetailAduan.class);
                                intentCommondetail.putExtra("primekeyy", aduanclass.getPrimekey());
                                intentCommondetail.putExtra("kategory", aduanclass.getKategori());
                                intentCommondetail.putExtra("deskripsy",aduanclass.getDeskripsi());
//                                intentCommondetail.putExtra("kategori",Selection);
//                                intentCommondetail.putExtra("deskripsi",Selection);
                                startActivity(intentCommondetail);
                                break;
                            case 1:
                                Intent intentCommonedit= new Intent(MainActivity.this,CommonUpdateAduan.class);
//                                intentCommonedit.putExtra("primekeyy", aduanclass.getPrimekey());
                                intentCommonedit.putExtra("primekeyy", aduanclass.getPrimekey());
                                intentCommonedit.putExtra("kategory", aduanclass.getKategori());
                                intentCommonedit.putExtra("deskripsy",aduanclass.getDeskripsi());
//                                intentCommondetail.putExtra("kategori",Selection);
//                                intentCommondetail.putExtra("deskripsi",Selection);
                                startActivity(intentCommonedit);
                                break;
                            case 2:
                                deleteData(primkey);
                        
                    
                );
                builder.create().show();
            
        );
        ((ArrayAdapter)listView.getAdapter()).notifyDataSetChanged();

这是我的 deleteData 方法

private void deleteData(final String primkey) 
        DatabaseReference mDatabase1 =FirebaseDatabase.getInstance().getReference("aduan").getRef();
        mDatabase1.removeValue();

我尝试运行代码,但没有删除 Firebase 数据库中的特定 listView 和特定节点,而是删除了“aduan”的所有子节点

仅供参考,我将键号设置为在数据输入中每次添加时自动增加 +1,但我不知道如何引用键号。

感谢您的帮助

【问题讨论】:

你从未在数据库引用中使用过主键 【参考方案1】:

您从未在数据库引用中使用过 primkey。代码应该是这样的

private void deleteData(final String primkey) 
        DatabaseReference mDatabase1 =FirebaseDatabase.getInstance().getReference("aduan").child(primkey);
        mDatabase1.removeValue();

【讨论】:

我已经尝试过了,但仍然失败。如何将孩子(primkey)引用给“aduan”的孩子?我试过这段代码来声明 String 但它也无济于事 primkey = FirebaseDatabase.getInstance().getReference().child("aduan").getKey(); @developerbdkmedan 你能给“aduan”中的孩子举个例子吗 当然,这里是我的数据库结构,可以点击链接查看My Firebase Database【参考方案2】:
private void deleteData(final String primkey) 
    DatabaseReference mDatabase1 =FirebaseDatabase.getInstance().getReference("aduan").getRef();
    mDatabase1.removeValue();

以上是获取您的数据库引用的引用,其中父节点为 aduan 返回。您应该使用

在 aduan 节点内导航
private void deleteData(final String primkey) 
    DatabaseReference mDatabase1 =FirebaseDatabase.getInstance().getReference("aduan").child("replace with child node key here");
    mDatabase1.removeValue();

完成后,您必须通知 listViewAdapter 所做的更改,以便它可以刷新内容。 我希望这会有所帮助。

【讨论】:

节点键设置为自动获取自动递增的数字(第一次输入将获得 20191,第二次输入将获得 20192,依此类推)。它不是手动设置的,所以我不能把孩子的名字放在 child() 中

以上是关于如何从 ListView 中删除 Firebase Android 中的特定节点的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 firebase 检索到 ListView?

更新 Firebase 时从 ListView 中删除旧条目

如何从 Firebase 检索数据到 ListView(使用自定义数组适配器)

如何使用 firebase 获取 listView 中每个项目的数据?

我如何从firebase检索数据到android listview顶部[重复]

如何使用 StreamBuilder 将数据从 firebase firestore 检索到颤振中,并使用 ListView.builder 显示值?