2016-07-02 4 views
0

Ich bin ziemlich neu in RxJava und ich möchte einen Methodenaufruf machen, der eine Observable, sync zurückgibt.Wie konvertiert man einen asynchronen Anruf in eine Synchronisierung?

Dies ist die Methode Unterschrift:

JsonObject login(); 

Ich habe versucht, so etwas, aber es hat nicht funktioniert:

public JsonObject login() { 
    return eventBus 
    .sendObservable(...) 
    .toBlocking().first().body(); 
} 

Wie kann ich es funktioniert?

Vielen Dank.

+0

Was speziell nicht funktioniert (alle Fehler, den Sie bekommen)? Sie haben auch erwähnt, dass Sie login() aufrufen müssen, aber das Codebeispiel hat eventBus.sendObservable() -Aufruf. Was gibt es zurück? – yurgis

Antwort

0

beobachtbare nach Design ist synchron, wenn Sie eine Operation Asynchronous möchten Sie eine der spezifischen Operatoren müssen. (OnSubscribe, onObserver, Puffer ....)

auch nicht verwenden, es sei denn toBlocking für Ihren Test , ist fast ein Anti-Muster, versuche stattdessen das Observer-Muster zu verwenden.

 public void main(String args[]){ 

     login().subscribe(jsonObject-> do Whatever you need); 
    } 


    public Observable<JsonObject> login() { 
     return eventBus.sendObservable(...) --> I guess this call return an Observable 
    } 

Wenn Sie einen Blick einige grundlegende Beispiele nehmen wollen werfen Sie einen Blick hier https://github.com/politrons/reactive

+0

Ich verstehe das nicht vollständig ... Sie müssen 'subscribe()' verwenden, damit der Aufruf von login() funktioniert. sonst kommt es nie wieder ... (Ich glaube, sie nennen es "kalt beobachtbar") ... – Shvalb

+0

Ja, es heißt "kalt", denn wenn Sie Ihr Observable erstellen, ist es faul, also wird keine Ausführung gemacht, bis Sie ein Abo abgeschlossen haben Beobachter, Moment, wenn das Observable eifrig wird und die Ausführung beginnt – paul