Search code examples
javaandroidrx-javasystem.reactiverx-android

RxJava two request in sequence


I have two requests, second one it dependence in the First so, how to make it in sequence, because there is some check will receive null if it request in parallel

        Observable<Map<Integer, SupportedVersion>> supportedVersionObservable = contentAPI
            .getSupportedVersionsContent()
            .compose(ReactiveUtils.applySchedulers())
            .map(supportedVersionsContentContentContainer -> supportedVersionsContentContentContainer.getContent().get(0).getMessage())
            .doOnNext(supportedVersionsMap -> {
                Timber.i("doOnNext invoked from supported version observable");
                for (Map.Entry<Integer,SupportedVersion> entry : supportedVersionsMap.entrySet())
                    if (Build.VERSION.SDK_INT >= entry.getKey())
                        model.setSupportedVersion(entry.getValue());

                model.setCurrentVersionExpiryDate(model.getSupportedVersion().getCurrentVersionExpiryDate());

                if (model.getSupportedVersion() != null)
                    model.setNewFeaturesSeen(sharedPreferencesManager.isNewFeaturesSeen(model.getSupportedVersion().getAvailableVersions().get(0)));
                if (model.isNewFeaturesSeen());
                //request data from here 
            })
            .retry(1);

    Observable<List<WhatsNew>> getWhatsNewFeature = contentAPI
            .getWhatsNewFeature(model.getSupportedVersion().getAvailableVersions().get(0))
            .compose(ReactiveUtils.applySchedulers())
            .doOnNext(whatsNewList -> {
                Timber.i("doOnNext invoked from supported version observable");
                if (!whatsNewList.isEmpty())
                    model.setWhatsNews(whatsNewList);
            })
            .retry(1);

Solution

  • You can use flatMap for that:

    public Observable<List<WhatsNew>> makeRequest { 
       return contentAPI
            .getSupportedVersionsContent()
            .flatMap(supportedVersionsMap -> {
                 //... model initialization
                 return contentAPI
                        .getWhatsNewFeature(model.getSupportedVersion().getAvailableVersions().get(0))
                        .compose(ReactiveUtils.applySchedulers())
                        .doOnNext(whatsNewList -> {
                        Timber.i("doOnNext invoked from supported version observable");
                        if (!whatsNewList.isEmpty())
                            model.setWhatsNews(whatsNewList);
                        })
                       .retry(1);
            });