Frage

Nicht nur eine Firebase-Frage, sondern ich verwende Firebase, um von Android aus Beiträge in einem Backend zu erstellen und es zehnmal einmal pro Sekunde auszuführen.

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

Dies ist jedoch ein asynchroner Aufruf und wenn ich eine While-Schleife einfüge:

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

Es scheint, dass zuerst die while-Schleife und dann am Ende ~10 Firebase-Aufrufe ausgeführt werden.Gibt es eine Möglichkeit, eine Zeitüberschreitung hinzuzufügen, sodass die asynchronen (Firebase-)Aufrufe eine Sekunde lang ausgeführt werden müssen, bevor der nächste asynchrone Aufruf aufgerufen wird?

War es hilfreich?

Lösung

Wenn man sich das anschaut Java-Beispiel auf der Firebase-Website, Sie werden sehen, dass es ein hat doTransactions Methode und eine onComplete Methode:

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

Sie würden also die neue Zeit im festlegen doTransaction Methode:

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

Und dann starten Sie eine nächste Iteration im onComplete Methode.

// transaction committed, do next iteration
if (time_now < time_start + 10 seconds) {
    countRef.runTransaction(handler);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top