Pergunta

Não apenas um Firebase pergunta, mas eu estou usando Firebase para fazer os posts para um back-end do Android e executá-lo 10 vezes, uma vez a cada segundo.

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

No entanto, esta é uma Chamada Assíncrona e quando eu colocar um loop while:

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

Parece que para executar o loop while primeiro e, em seguida, ~10 Firebase chamadas no final.Existe uma maneira de adicionar um limite de tempo para que as forças Assíncrona (Firebase) chama a correr para um segundo antes de chamar o próximo chamada Assíncrona?

Foi útil?

Solução

Se você olhar para o Exemplo de Java no web site da Firebase, você vai ver que ele tem um doTransactions método e um 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);

Assim que você definir o novo tempo no doTransaction método:

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

E, em seguida, iniciar uma próxima iteração no onComplete o método.

// transaction committed, do next iteration
if (time_now < time_start + 10 seconds) {
    countRef.runTransaction(handler);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top