Android Firebase删除崩溃应用程序删除值

时间:2017-11-01 12:53:57

标签: java android listview firebase firebase-realtime-database

我想从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);

delete only this value

3 个答案:

答案 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}}