2016-09-26 3 views
1

RxJavaRetrofit으로 동기식 호출을 구현해야합니다 .ID는 ArrayList입니다. 이 배열을 반복하고 Retrofit을 사용하여 각 ID에 대해 웹 서버에 호출해야하지만이 방법은 비동기 만 수행하는 방법을 알고 있습니다. 다음 호출이 끝나면 대기열에서 수행하는 방법을 알 수 있습니다.RxJava로 요청 대기열

+0

만약 당신이'onSuccess' 콜백을 가지고 있다면, 메소드는 onSuccess가 호출 될 때마다 인덱스가 배열의 크기와 같아 질 때까지 증가 된 인덱스에 의해 반복되고 메소드를 생성 할 수 있습니다. –

+0

나는 그것에 대해 생각했지만 RxJava가이 작업을위한보다 명확한 구현을 가지고 있을지도 모른다. – Near1999

답변

0

귀하의 질문에 상당히 모호하지만, 나는 그것을 이해했을 것입니다. 항목 목록에서 시작하여 from()을 사용하여 관찰 가능 항목을 만들 수 있습니다. 이 값은 API 호출 후에 매핑 될 수 있습니다. concatMap()을 사용하면 결과의 순서가 보장되므로 효과적으로 결과를 관찰 할 수 있습니다. 어떤 것을 원하는대로 할 수 있으며 심지어 toBlocking()으로 전화하여 관찰 할 수있는 동기를 만들어야합니다. 그러나 이것에 대한 필요가 없어야합니다.

List<Result> results = 
     Observable.from(ids) 
        .concatMap(id -> callToWebServer(id)) 
        .toList() 
        .toBlocking() 
        .single(); 
+0

.single() 메서드는 무엇을합니까? – Near1999

+0

첫 번째 항목을 제공하고 더 많거나 적은 경우 throw합니다. – tynn

+0

개조 작업이 진행되지 않습니다 – Near1999

0

이 코드는

Observable.from(ids) 
      .map(id -> callToWebServer(id).toBlocking().first()) 

synchronious을 실행합니다하지만 당신은주의 깊게 지도()에) callToWebServer (에서 모든 네트워크 오류를 처리해야합니다.

관련 문제