Calling four api's combining together using RxJava

只谈情不闲聊 提交于 2019-12-11 17:49:21

问题


I am new to RxJava

Restapi.class

/************/
    @GET("app/dashboard")
    Observable<CategoryHomeModel[]> getCategories(@HeaderMap Map<String, String> headers);

    @GET("app/wallet/balance")
    Observable<WalletBalance> getWalletBalance(@HeaderMap Map<String, String> headers);

    @GET("/app/swap/myrateswaps")
    Observable<SwapSettings> rateMySwap(@HeaderMap Map<String, String> headers);

    @GET("/app/getsettings")
    Observable<Settings> getSettings(@HeaderMap Map<String, String> headers);
    /************/

I have Four observables

Observable<CategoryHomeModel[]> categoriesObservable = retrofit
            .create(Restapi.class)
            .getCategories(prepareHeaders())
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread());

    Observable<WalletBalance> walletObservable = retrofit
            .create(Restapi.class)
            .getWalletBalance(prepareHeaders())
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread());

    Observable<Settings> settingsObservable = retrofit
            .create(Restapi.class)
            .getSettings(prepareHeaders())
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread());

    Observable<SwapSettings> ratingsObservable = retrofit
            .create(Restapi.class)
            .rateMySwap(prepareHeaders())
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread());

How to combine all four observables into one and get the response in one place and handle all the response of all the observables together


I found out this can be done from Merge, If so how to use the merge ?


回答1:


using this way

List<Observable<?>> observables = Lists.newArrayList(categoriesObservable, walletObservable, settingsObservable, ratingsObservable);
            Observable.merge(observables).toList().subscribe(new Action1<List<Object>>() {
                @Override
                public void call(List<Object> objects) {
                    // success
                }
            }, new Action1<Throwable>() {
                @Override
                public void call(Throwable throwable) {
                    // error
                }
            });

or you can using mergeDelayError instead

hope this helps




回答2:


You can use Zip operator

Observable<String> result = 
Observable.zip(categoriesObservable, walletObservable, settingsObservable, ratingsObservable, new Function4<CategoryHomeModel, WalletBalance, Settings, SwapSettings, String>() {
    @Override
    public String apply(CategoryHomeModel category, WalletBalance wallet, Settings settings, SwapSettings swap) {
        String res = category.name + wallet.name + settings.name + swap.name;
        // You can customize the final result based upon your requirements
        return res;
    }
});


来源:https://stackoverflow.com/questions/51262421/calling-four-apis-combining-together-using-rxjava

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!