Domanda

Non esclusivamente una domanda di Firebase, ma sto usando Firebase per effettuare i post su un backend da Android e eseguirlo 10 volte, una volta ogni secondo.

Firebase ref = new Firebase(URL);
ref.child("Time").setValue(Currentime());
.

Tuttavia questa è una chiamata asincrona e quando metto un ciclo di pollice:

while (time_now < time_start + 10 seconds) {
     Firebase ref = new Firebase(URL);
     ref.child("Time").setValue(Currentime());
}
.

Sembra di eseguire prima il ciclo del ciclo e poi ~ 10 chiamate di Firebase alla fine.C'è un modo per aggiungere un timeout in modo che forzasse le chiamate Asynchronous (Firebase) per funzionare per un secondo prima di chiamare la prossima chiamata Async?

È stato utile?

Soluzione

Se guardi il Java Esempio sul sito Web di Firebase , tuVedere che ha un metodo doTransactions e un metodo onComplete:

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);
.

Quindi impostare il nuovo tempo nel metodo doTransaction:

// set the new time
currentData.setValue(time_now);
return Transaction.success(currentData);
.

e quindi avviare una prossima iterazione nel metodo onComplete.

// transaction committed, do next iteration
if (time_now < time_start + 10 seconds) {
    countRef.runTransaction(handler);
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top