Как я могу удалить дочерний узел firebase с тем же именем? Получите ключ, который будет отделен от одного узла, и удалите этот узел с таким же ключом из другого - PullRequest
1 голос
/ 07 мая 2020

Я хочу удалить все дочерние узлы из разных узлов с одинаковыми именами. Я использовал следующий код, чтобы получить ключи дочерних узлов, которые нужно удалить, и передать их другому узлу, но он удаляет их с обоих узлов (completedSurveys и 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) {

        }
    });

enter image description here

Ниже приведена структура базы данных firebase в реальном времени.

1 Ответ

1 голос
/ 07 мая 2020

Удалять можно по одному или один раз; Я просто хочу удалить все имена, которые находятся в обеих БД, из surveyList.

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

Теперь, чтобы удалить все значения в узле completedSurveys сразу, вы должны использовать следующее строка кода:

completedSurveysRef.removeValue();

Если вы хотите удалить каждого дочернего элемента отдельно, используйте следующие строки кода:

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

Изменить:

Согласно вашему комментарию:

Уважаемый Алекс, я хочу удалить все дочерние узлы из surveyList, которые находятся в CompleteList. sld0000001 и sld0000002 находятся в completedList и SurveyList, поэтому я хочу удалить эти значения из surveyList, а не из comletedList.

Используйте следующие строки кода:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...