如何从 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检索数据到android listview顶部[重复]
如何使用 StreamBuilder 将数据从 firebase firestore 检索到颤振中,并使用 ListView.builder 显示值?