Agregar tiempo de espera a llamadas asincrónicas en Java
-
21-12-2019 - |
Pregunta
No es solo una pregunta de Firebase, sino que estoy usando Firebase para realizar publicaciones en un backend desde Android y ejecutarlo 10 veces, una vez por segundo.
Firebase ref = new Firebase(URL);
ref.child("Time").setValue(Currentime());
Sin embargo, esta es una llamada asincrónica y cuando pongo un bucle while:
while (time_now < time_start + 10 seconds) {
Firebase ref = new Firebase(URL);
ref.child("Time").setValue(Currentime());
}
Parece ejecutar el bucle while primero y luego ~10 llamadas de Firebase al final.¿Hay alguna manera de agregar un tiempo de espera para que fuerce la ejecución de las llamadas asincrónicas (Firebase) durante un segundo antes de llamar a la siguiente llamada asincrónica?
Solución
Si miras el Ejemplo de Java en el sitio web de Firebase, verás que tiene un doTransactions
método y un onComplete
método:
Firebase countRef = new Firebase(URL);
Transaction.Handler handler = new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData currentData) {
// set the new time
...
}
@Override
public void onComplete(FirebaseError error, boolean committed, DataSnapshot currentData) {
if (error != null) {
...
} else {
if (!committed) {
...
} else {
// transaction committed, do next iteration
...
}
...
}
}
});
countRef.runTransaction(handler);
Entonces establecerías la nueva hora en el doTransaction
método:
// set the new time
currentData.setValue(time_now);
return Transaction.success(currentData);
Y luego comenzar una siguiente iteración en el onComplete
método.
// transaction committed, do next iteration
if (time_now < time_start + 10 seconds) {
countRef.runTransaction(handler);
}