Java >> Java-zelfstudie >  >> Java

Hoe kan ik een firebase-kinderknooppunt met dezelfde naam verwijderen? Haal de sleutel die moet worden verwijderd van het ene knooppunt en verwijder dat knooppunt met dezelfde sleutel van het andere

Ik wil alle onderliggende knooppunten van verschillende knooppunten met dezelfde namen verwijderen. Ik heb de volgende code gebruikt om de sleutels van de onderliggende knooppunten te verwijderen en deze door te geven aan het andere knooppunt, maar het verwijdert ze van beide knooppunten (completedSurveys en surveyList ).

DatabaseReference dr_completedSurveys = firebaseDatabase.getReference("users").child(userId).child("completedSurveys");
    dr_completedSurveys.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            StringBuilder stringBuilder = new StringBuilder();
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                stringBuilder.append(ds.getKey()).append("n");
                String completedSurveys = stringBuilder.toString();
                String[] lines = completedSurveys.split("n");
                for (String line : lines) {
                    //Toast.makeText(HomePage.this, line, Toast.LENGTH_SHORT).show();
                    String compSurList = line;
                    DatabaseReference dr_completed = FirebaseDatabase.getInstance().getReference("users").child(userId);
                    dr_completed.child("surveyList").child(compSurList).removeValue();
                }
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

Hieronder vindt u de realtime databasestructuur van Firebase.

Antwoord

Het kan één voor één of één keer worden verwijderd; Ik wil gewoon alle namen verwijderen die op beide DB staan ​​van surveyList .

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference completedSurveysRef = rootRef.child("users").child(uid).child("completedSurveys");

Om nu alle waarden binnen de completedSurveys . te verwijderen node tegelijk, moet u de volgende regel code gebruiken:

completedSurveysRef.removeValue();

Als u elk kind afzonderlijk wilt verwijderen, gebruik dan de volgende regels code:

completedSurveysRef.child("sld0000001").removeValue();
completedSurveysRef.child("sld0000002").removeValue();

Bewerken:

Volgens uw opmerking:

Beste Alex, ik wil alle onderliggende nodes verwijderen uit surveyList , die incompleteList. sld0000001 en sld0000002 zijn beide in completedList en surveyList, dus ik wil deze waarden verwijderen uit surveyList niet van comletedList .

Gebruik de volgende regels code:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference completedSurveysRef = rootRef.child("users").child(uid).child("completedSurveys");
DatabaseReference surveyListRef = rootRef.child("users").child(uid).child("surveyList");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String surveyId = ds.getKey();;
            surveyListRef.child(surveyId).removeValue();
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
    }
};
completedSurveysRef.addListenerForSingleValueEvent(valueEventListener);

Java-tag