Hinzufügen einer Zeitüberschreitung zu asynchronen Aufrufen in Java
-
21-12-2019 - |
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?
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);
}