Как удалить несколько узлов в одном запросе в firebase?
У меня есть два узла от одного корня, и я хочу удалить данные из обоих из них в одном запросе. Оба подузла имеют одинаковый ключ. Я попробовал это:
Firebase firebaseRef = new Firebase(<root_path>);
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put(<path_to_first_node>, key);
childUpdates.put(<path_to_second_node>, key);
listToRemoveRef.updateChildren(childUpdates, null);
Но он удалил данные только с первого узла
Ответы
Ответ 1
Похоже, вы используете функцию updateChildren
неправильно. Что вы хотите сделать, это
Firebase firebaseRef = new Firebase(<root_path>);
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("<path_to_first_node>" + key, null);
childUpdates.put("<path_to_second_node>" + key, null);
listToRemoveRef.updateChildren(childUpdates);
Второй параметр updateChildren
не устанавливает значение в null
это дополнительный слушатель завершения (, com.google.firebase.database.DatabaseReference.CompletionListener) rel="nofollow noreferrer">см. Документацию). Таким образом, вместо передачи null
в последней строке, вы можете просто опустить его.
Ответ 2
Одним из способов может быть размещение вложений. Пожалуйста, смотрите код ниже:
fbDbRefRoot.child("Node1").removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
fbDbRefRoot.child("Node2").removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(v.getContext(), "Deleted", Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(v.getContext(), "Not Deleted", Toast.LENGTH_SHORT).show();
}
});
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(v.getContext(), "Not Deleted", Toast.LENGTH_SHORT).show();
}
});