2017-06-07 2 views
0
List<String> listExample = Arrays.asList("one", "two", "three"); 

Denken Sie an i Liste der Zeichenfolge haben, und mit RxJava (Observable.fromArray)RxJava aus der Liste mit Asynchron Warten auf Rückruf

Observable.fromArray(ids.toArray(new String[ids.size()])).subscribe(new Consumer<String>() { 
    @Override 
    public void accept(@NonNull String s) throws Exception { 

    } 
}); 

denken hier jede Saite einen Async Rückruf hat hier einmal i erhalten, dass Callback sollte es zum nächsten String bewegen. Ist es möglich, rxjava zu verwenden?

Dies ist der Code, den ich derzeit habe, es wartet nicht bis zum Rückruf richtig !.

for (String id : ids) { 
    getMessage(id, new urlGenCallback() { 
     @Override 
     public void urlAndToken(String url, String token, String idx) { 

     } 
    }); 
} 

Danke @Geoffrey Marizy

Antwort: Check Below für weitere Informationen über ConcatMap Visit Here

+0

Setzen Sie als Antwort zu beantworten, nicht bearbeiten Ihrer Frage . Oder verbessern Sie die Frage, die Ihnen dabei geholfen hat. – tynn

+0

Da das Problem gelöst ist, ist der Stack-Overflow-Weg, Dinge zu tun, um die Antwort zu markieren, die es als "akzeptiert" löste –

Antwort

0
Observable.fromArray(ids.toArray(new String[ids.size()])) 
     .concatMap(s -> { 
      return Observable.create(new ObservableOnSubscribe<String>() { 
       @Override 
       public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception { 
        getMessage(s, new urlGenCallback() { 
         @Override 
         public void urlAndToken(String url, String token, String id) { 
          e.onNext("......"); 
          e.onComplete(); 
         } 
        }); 
       } 
      }); 
     }).subscribe(new Consumer<String>() { 
    @Override 
    public void accept(@NonNull String s) throws Exception { 
     //All other code goes here 
    } 
});