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?

¿Fue útil?

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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top