我想删除所有的子节点,形成具有相同名称的不同节点,我使用下面的代码来获取要删除的子节点的键,并将其传递给另一个节点,但它从两个节点中删除它们()。我使用了下面的代码来获取要删除的子节点的键,并将其传递给另一个节点,但它从两个节点中删除了它们(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实时数据库结构。
可以一个一个删除,也可以一次删除,我只想删除所有在两个DB上找到的名字。
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();
编辑:
根据你的评论:
亲爱的Alex,我想删除所有的子节点从
surveyList
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);