Ist es möglich, synchron laden von Daten aus FB?
Ich versuche zu aktualisieren, Teile einer WebView in meiner Android-app mit Daten-ich bin immer von einem peer verbunden über FB. Dafür könnte es hilfreich sein, zu führen blockierende Operationen, die Rückkehr der benötigten Daten. Zum Beispiel, eine Implementierung des Chat-Beispiel, das die warten, bis ein anderer chat-Teilnehmer schreibt etwas vor dem push.setValue (), um zurückzukehren.
Ist so ein Verhalten möglich mit der FB?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf einer regulären JVM, Sie würde dies tun, mit regulären Java-Synchronisation primitiven.
Beispiel:
Aber das funktioniert nicht auf Android. Und das ist eine Gute Sache, denn es ist eine schlechte Idee, diese Art von blockieren Ansatz, was auf die Benutzeroberfläche. Der einzige Grund, ich hatte diesen code rumliegen, weil ich brauchte, in einem unit-test.
In real-user-facing-code, den Sie gehen sollten, für einen event-driven Ansatz. Also statt "warten Sie, bis die Daten kommen und und dann send my message", würde ich "wenn die Daten kommt, sendet meine Botschaft":
Das Ergebnis ist genau das gleiche, aber dieser code nicht erforderlich, Synchronisation und nicht blockieren auf dem Android.
semaphore.tryAcquire(10, TimeUnit.SECONDS)
es immer timed out und dann die callback gefeuert.Ich kam mit einem anderen Weg, der das abrufen von Daten synchron.
Voraussetzung ist nicht auf dem UI-Thread.
Getestet habe ich meine Lösung und es ist in Ordnung, aber bitte beweisen mich nicht falsch!
Hier ist ein längeres Beispiel basiert auf Alex kompakte Antwort:
Beachten Sie, dass dies nicht gute Praxis, da es blockiert den UI thread, sollte man eine callback-statt im Allgemeinen. Aber in diesem speziellen Fall, das hilft.
Wenn jemand auch darüber nachzudenken, wie zu verwenden Kotlin ist coroutine, die Sie verwenden können
kotlinx-Coroutinen-play-services
.Hinzufügen, um Ihre app
build.gradle
Datei:implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.1.1"
Dann einfach:
Machte ich eine einfache Klasse zu nennen Aufgaben synchron in Android.
Beachten Sie, dass dies ähnlich
Javascript
's async-await-Funktion.Überprüfen Sie meine gist.
Hier ist ein Beispiel code um es zu benutzen.