Я пытаюсь переместить данные из одного пути в базу данных реального времени в другой.
Поэтому я должен скопировать данные из одного пути (1) в другой путь (2) и после этого удалить данные из (1).
Я пробовал ниже код:
ConfiguracaoFirebase.getFirebaseReferenceRelatorios().limitToFirst(20)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (final DataSnapshot ids: dataSnapshot.getChildren()){
String ano = ids.child("ano").getValue().toString();
String mes = ids.child("mes").getValue().toString();
String dia = ids.child("dia").getValue().toString();
String nomePaciente = ids.child("nomePaciente").getValue().toString();
moveFirebaseRecord(ids.getRef(), ConfiguracaoFirebase.getFirebaseReferenceReports().child(nomePaciente).child(ano).child(mes).child(dia).child(ids.getKey()));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
и этот func moveFirebaseRecord:
public void moveFirebaseRecord(final DatabaseReference fromPath, final DatabaseReference toPath) {
fromPath.addListenerForSingleValueEvent(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
toPath.setValue(dataSnapshot.getValue(), new DatabaseReference.CompletionListener() {
@Override
public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {
fromPath.removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Constant.print("REMOVED: " + fromPath.getKey());
}
});
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
Однако когда я запускаю, я вижу, что он правильно перемещает fromPath в toPath, но сразу после того, как УДАЛЯЕТ только что созданный toPath ... Так что он удаляет toPath и fromPath ...
У кого-нибудь есть идея, почему это происходит и как я могу вырезать и переместить данные из Firebase? Заранее спасибо.