我想从firebase中删除列表视图中的数据。
lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, final View view, final int position, long id) {
mDatabaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
DatabaseReference s =snapshot.getRef();
mDatabaseRef.child(String.valueOf(s)).removeValue();
}
}
应用程序在此行崩溃:mDatabaseRef.child(String.valueOf(s)).removeValue();
我也使用setValue(null);
答案 0 :(得分:2)
要从Firebase数据库中实际删除子项,您需要将child()
方法作为参数传递给String
,该参数表示数据库中位于特定位置的键。
snapshot.getRef()
实际上会返回您附加侦听器的位置的完整引用。
String.valueOf(s)
会返回您引用的String
表示形式。要删除值,您需要使用实际的String。
让我们举个例子。您有以下路径:
Firebase-root/users/uid/name
其中name的值为John
。要删除name
,您需要使用以下代码行:
FirebaseDatabase.getInstance().getReference()
.child("users")
.child("uid")
.child("name")
.removeValue();
而不是这行代码:
FirebaseDatabase.getInstance().getReference()
.child("users")
.child("uid")
.child("Firebase-root/users/uid/name")
.removeValue();
您正在尝试使用代码。
根据您的新更新,为了删除该记录,当您按下该随机密钥时,您需要先将该密钥存储在这样的可变量中:
String key = yourRef.push().getKey(); //Store the pushed key
FirebaseDatabase.getInstance().getReference()
.child("Hamza")
.child(key)
.removeValue();
答案 1 :(得分:0)
崩溃是因为你没有告诉fire-base
要删除的内容,要删除子节点,你必须告诉fire-base
你要删除该节点确实提到.Child("hamza")
然后它的子节点要删除的,如果要删除hamza
节点,请先将其作为键hamza
传递给该值。然后将其删除,如果您使用的是列表视图,则从{{{}获取其ID 1}}或object
你传递的是什么。如果您不知道该对象的密钥,您只需查询然后使用getKey()方法(如postsnapshot.getKey())从DataSnapshot获取该对象密钥。这里array
是关键你要删除的孩子。!
尝试像这样实施uid
model class
答案 2 :(得分:0)
{{1}}