2017-07-07 1 views
0
 getRemarks(licensePlate) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribeOn(AndroidSchedulers.mainThread()) 
      .subscribe(response -> { 
       Store.remarks(response); 
      }, throwable -> { 
       Timber.e("Error", throwable); 
      }); 

    public static Observable<List<Remark>> getRemarks(String number) { 
     return getApiService().getRemarks(number); 
    } 

bewegen abgerufen werden, denn nun dies mein Code ist, aber ich muss warten, bis diese Methode die Antwort erhalten, bevor sie mit dem Code übergehen. Wie ich gesehen habe, muss ich .toBlocking (aber es blockierte meinen Code für unbestimmte Zeit) und ich las irgendwo, dass ich für jede Methode brauche, aber nicht weiß, wie man es benutzt.RxJava auf die Antwort warten, bevor also auf

+0

hast du das funktioniert? –

Antwort

0

Statt subscribe Verwendung:

.toBlocking() 
.forEach(new Action1<List<Remark>>() { 
    @Override 
    public void call(List<Remark> remarks) { 
     Store.remarks(remarks); 
    } 
}); 

Wie auch immer, es sei denn, Sie dies für den Test verwenden, würde ich vermeiden toBlocking zu verwenden, und ich würde für eine andere Strategie suchen. toBlocking der Tat gibt eine BlockingObservable, die als documentation says:

Es kann zum Testen und Demozwecke nützlich sein, ist aber für Produktionsanwendungen im Allgemeinen ungeeignet.

Ziehen Sie in Erwägung, die wahre Kraft von RxJava durch die Zusammensetzung des Stroms zu nutzen. Sie können einen Blick here für das Verständnis nehmen, die die zur Verfügung stehenden Optionen sind für die Kombination von Observable s

0

wenn getRemarks() Nachrüstung verwendet, dann können Sie etwas tun, wie folgt, die synchron ausgeführt wird (Sie müssen in nicht-UI-Thread ausgeführt werden, wenn Sie tun dies zu vermeiden NetworkOnMainThreadException)

getApiService().getRemarks(number).execute() 
Verwandte Themen