Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxJava两个顺序请求_Java_Android_Rx Java_System.reactive_Rx Android - Fatal编程技术网

RxJava两个顺序请求

RxJava两个顺序请求,java,android,rx-java,system.reactive,rx-android,Java,Android,Rx Java,System.reactive,Rx Android,我有两个请求,第二个是it依赖,第一个是it依赖,所以,如何按顺序进行,因为如果它并行请求,则有一些检查将接收null Observable<Map<Integer, SupportedVersion>> supportedVersionObservable = contentAPI .getSupportedVersionsContent() .compose(ReactiveUtils.applySche

我有两个请求,第二个是it依赖,第一个是it依赖,所以,如何按顺序进行,因为如果它并行请求,则有一些检查将接收null

        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);
Observable-supportedVersionObservable=contentAPI
.GetSupportedVersionContent()
.compose(ReactiveUtils.applySchedulers())
.map(SupportedVersionContentContainer->SupportedVersionContentContainer.getContent().get(0).getMessage())
.doOnNext(支持的版本映射->{
Timber.i(“从支持的可观察版本调用doOnNext”);
对于(Map.Entry:SupportedVersionMap.entrySet())
如果(Build.VERSION.SDK_INT>=entry.getKey())
model.setSupportedVersion(entry.getValue());
model.setCurrentVersionExpiryDate(model.getSupportedVersion().getCurrentVersionExpiryDate());
if(model.getSupportedVersion()!=null)
model.setNewFeaturesSen(SharedReferencesManager.IsNewFeaturesSen(model.getSupportedVersion().getAvailableEversions().get(0));
if(model.isNewFeaturesSeen());
//从这里请求数据
})
.重试(1);
可观察的getWhatsNewFeature=contentAPI
.getWhatsNewFeature(model.getSupportedVersion().GetAvailableEversions().get(0))
.compose(ReactiveUtils.applySchedulers())
.doOnNext(whatsNewList->{
Timber.i(“从支持的可观察版本调用doOnNext”);
如果(!whatsNewList.isEmpty())
model.setWhatsNews(whatsNewList);
})
.重试(1);

您不需要副作用。您可以在操作符中保持模型状态:

@Test
void name() {
    ContentApi mock = mock(ContentApi.class);

    Observable<Model> modelObservable = mock.getSupportedVersionsContent()
            .map(s -> {
                // do Mapping
                return new Model();
            })
            .flatMap(model -> mock.getWhatsNewFeature(model)
                    .map(whatsNews -> {
                        // Create new model with whatsNews
                        return new Model();
                    }), 1);
}

interface ContentApi {
    Observable<String> getSupportedVersionsContent();

    Observable<List<WhatsNew>> getWhatsNewFeature(Model model);
}

class Model {

}

class WhatsNew {

}
@测试
无效名称(){
ContentApi mock=mock(ContentApi.class);
Observable modelObservable=mock.getSupportedVersionContent()
.map(s->{
//绘制地图
返回新模型();
})
.flatMap(模型->模拟.getWhatsNewFeature(模型)
.map(whatsNews->{
//使用whatsNews创建新模型
返回新模型();
}), 1);
}
接口ContentApi{
可观察的GetSupportedVersionContent();
可观察的getWhatsNewFeature(模型);
}
类模型{
}
新课程{
}
请查看flatMap的详细说明:


你不需要副作用。您可以在操作符中保持模型状态:

@Test
void name() {
    ContentApi mock = mock(ContentApi.class);

    Observable<Model> modelObservable = mock.getSupportedVersionsContent()
            .map(s -> {
                // do Mapping
                return new Model();
            })
            .flatMap(model -> mock.getWhatsNewFeature(model)
                    .map(whatsNews -> {
                        // Create new model with whatsNews
                        return new Model();
                    }), 1);
}

interface ContentApi {
    Observable<String> getSupportedVersionsContent();

    Observable<List<WhatsNew>> getWhatsNewFeature(Model model);
}

class Model {

}

class WhatsNew {

}
@测试
无效名称(){
ContentApi mock=mock(ContentApi.class);
Observable modelObservable=mock.getSupportedVersionContent()
.map(s->{
//绘制地图
返回新模型();
})
.flatMap(模型->模拟.getWhatsNewFeature(模型)
.map(whatsNews->{
//使用whatsNews创建新模型
返回新模型();
}), 1);
}
接口ContentApi{
可观察的GetSupportedVersionContent();
可观察的getWhatsNewFeature(模型);
}
类模型{
}
新课程{
}
请查看flatMap的详细说明:


您可以使用flatMap:

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);
        });
公共可观察makeRequest{
返回contentAPI
.GetSupportedVersionContent()
.flatMap(支持的版本映射->{
//…模型初始化
返回contentAPI
.getWhatsNewFeature(model.getSupportedVersion().GetAvailableEversions().get(0))
.compose(ReactiveUtils.applySchedulers())
.doOnNext(whatsNewList->{
Timber.i(“从支持的可观察版本调用doOnNext”);
如果(!whatsNewList.isEmpty())
model.setWhatsNews(whatsNewList);
})
.重试(1);
});

您可以使用flatMap:

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);
        });
公共可观察makeRequest{
返回contentAPI
.GetSupportedVersionContent()
.flatMap(支持的版本映射->{
//…模型初始化
返回contentAPI
.getWhatsNewFeature(model.getSupportedVersion().GetAvailableEversions().get(0))
.compose(ReactiveUtils.applySchedulers())
.doOnNext(whatsNewList->{
Timber.i(“从支持的可观察版本调用doOnNext”);
如果(!whatsNewList.isEmpty())
model.setWhatsNews(whatsNewList);
})
.重试(1);
});