我要删除所有具有相同名称的不同节点的子节点。我使用以下代码来获取要删除的子节点的密钥,并将其传递给另一个节点,但是它正在从两个节点(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) {
}
});
以下是firebase实时数据库结构。
答案 0 :(得分:1)
可以一次或一次将其删除;我只想从
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
中删除completedList中的所有子节点。 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);