Aaron177
Aaron177

Reputation: 51

Firebase Delete Child onButtonClick

My problem is I cant delete a single child from the firebase database, either nothing happens or it deletes the whole child and all data. I've looked around and tried multiple solutions but for whatever reason mine wont work and I out of ideas why.

Any help is appreciated.

Java class.

//get data passed from viewpasswords and put them into textviews
        name.setText(getIntent().getExtras().getString("data"));
        password.setText(getIntent().getExtras().getString("pass"));

        //get current user id and reference to database
        final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        assert user != null;
        userID = user.getUid();
        dbRef = FirebaseDatabase.getInstance().getReference();


        //button onclick stuff
        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DeleteData();
            }
        });

        exit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(DecryptPassword.this, ViewPasswords.class);
                startActivity(intent);
            }
        });

    }

    private void DeleteData() {
        final String passName = name.getText().toString();
        Query query = dbRef.child("Passwords").child(userID).orderByChild("PasswordName").equalTo(passName);

        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if(dataSnapshot.getChildrenCount() > 0){
                    for(DataSnapshot itemSnapshot : dataSnapshot.getChildren()){
                        dataSnapshot.getRef().removeValue();
                        Toast.makeText(DecryptPassword.this, "Success", Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(DecryptPassword.this, ViewPasswords.class);
                        startActivity(intent);
                    }
                }else{
                    Toast.makeText(DecryptPassword.this, "Failed to delete", Toast.LENGTH_SHORT).show();
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
                Toast.makeText(DecryptPassword.this, "Error occurred sorry", Toast.LENGTH_SHORT).show();
            }
        });
    }

Firebase Database:

enter image description here

Thanks.

Upvotes: 1

Views: 308

Answers (1)

Yunus Kulyyev
Yunus Kulyyev

Reputation: 1022

dataSnapshot.getRef().removeValue();

Change this part to:

itemSnapshot.removeValue();

Upvotes: 3

Related Questions