Несколько звонков с retrofit2 и rxjava3 - PullRequest
0 голосов
/ 03 апреля 2020

Я хочу сделать несколько звонков одновременно, используя дооснащение. Когда оба вызова заканчиваются, я хочу что-то сделать с результатами.

Вот мой интерфейс

public interface IService {
    @GET("all")
    Observable<Global> getGlobal();

    @GET("countries")
    Observable<Country> getCountries();
}

Это мой неполный код

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://coronavirus-19-api.herokuapp.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
                .build();

        IService api = retrofit.create(IService.class);

        List<Observable<?>> requests = new ArrayList<>();
        requests.add(api.getGlobal());
        requests.add(api.getCountries());

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Observable.combineLatest() - это то, что вам нужно, поэтому оно будет выглядеть так:

Observable<YourResult> observable = Observable
    .combineLatest( 
        api.getGlobal(), 
        api.getCountries(), 
        { global, country -> YourResult(global, country) }
    )
0 голосов
/ 03 апреля 2020

Вы должны использовать оператор zip

val service:IService

Observable.zip(
    service.global,
    service.countries,
    BiFunction { global, countries -> 
        // combine result
    }
)
...