首页 > 解决方案 > 如何从firebase中删除节点

问题描述

在此处输入图像描述

我正在开发一个带有firebase的android项目。现在我想在单击按钮时删除一个节点。但是发生了这个错误,我无法解决。我想删除 1589445758397 的节点。当我按下删除按钮时,节点 post 中的所有帖子开始一一删除,然后名称为 Posts 的上层节点删除。请帮我解决它。

这是我的代码-

private void deletePostsWithImages(final String pId, String pImage) {

        ////////////////////////////
        final ProgressDialog progressDialog = new ProgressDialog(context);
        progressDialog.setTitle("Deleting Post");
        progressDialog.setMessage("Please wait...");
        progressDialog.show();
        /////////////////////


        StorageReference picRef = FirebaseStorage.getInstance().getReferenceFromUrl(pImage);
        picRef.delete()
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {

                        Query fQuery = FirebaseDatabase.getInstance().getReference("Posts")
                                .orderByChild("pId").equalTo(pId);

                        fQuery.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                for (DataSnapshot ds: dataSnapshot.getChildren()) {
                                    ds.getRef().removeValue();
                                    Toast.makeText(context, "Post deleted successfully.", Toast.LENGTH_SHORT).show();
                                    progressDialog.dismiss();
                                }
                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError) {

                            }
                        });

                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        progressDialog.dismiss();
                        Toast.makeText(context, "" + e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });


    }


    private void deletePostsWithoutImages(final String pId) {
        final ProgressDialog progressDialog = new ProgressDialog(context);
        progressDialog.setTitle("Deleting Post");
        progressDialog.setMessage("Please wait...");
        progressDialog.show();
        Query fQuery = FirebaseDatabase.getInstance().getReference("Posts")
                .orderByChild("pId").equalTo(pId);

        fQuery.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot ds: dataSnapshot.getChildren()) {
                    ds.getRef().removeValue();
                    Toast.makeText(context, "Post deleted successfully.", Toast.LENGTH_SHORT).show();
                    progressDialog.dismiss();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

    }
[![enter image description here][1]][1]


  [1]: https://i.stack.imgur.com/r7nrI.png

标签: firebaseandroid-studiofirebase-realtime-database

解决方案


代替:

for (DataSnapshot ds: dataSnapshot.getChildren()) {
ds.getRef().removeValue();
Toast.makeText(context, "Post deleted successfully.", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}

尝试:

dataSnapshot.setValue(null);
Toast.makeText(context, "Post deleted successfully.", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();

推荐阅读