Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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
错误情况下可观察到的Rx Java替换_Java_Android_Rx Java_Rx Android - Fatal编程技术网

错误情况下可观察到的Rx Java替换

错误情况下可观察到的Rx Java替换,java,android,rx-java,rx-android,Java,Android,Rx Java,Rx Android,我有两个URL来获取数据,例如:\location\u 1\{userid}和\location\u 2\{userid}。首先,我得到用户列表,然后需要通过上述请求获取用户详细信息。问题是我需要调用\location\u 1\{userid},如果出现错误(异常),请从\location\u 2\{userid}获取数据。是否有可能使用单rx链?我已经尝试了如上所述的try/catch,但似乎只捕获较新的调用,只捕获onErrorResumeNext调用 Observable<List&

我有两个URL来获取数据,例如:
\location\u 1\{userid}
\location\u 2\{userid}
。首先,我得到用户列表,然后需要通过上述请求获取用户详细信息。问题是我需要调用
\location\u 1\{userid}
,如果出现错误(异常),请从
\location\u 2\{userid}
获取数据。是否有可能使用单rx链?我已经尝试了如上所述的
try/catch
,但似乎只捕获较新的调用,只捕获
onErrorResumeNext
调用

Observable<List<TestModel2>> observable = apiTest
     .performTest()
     .flatMapIterable(items -> items)
     .flatMap(testModel -> {

        try
        {
            return apiTest.performTest2(testModel.userId);

        } catch (Exception e)
        {
            return apiTest.performTest3(testModel.userId);
        }

      }).doOnNext(testModel2 -> {Log.d("TestItemData", "doOnNext --- " + testModel2.title);})
            .onErrorResumeNext(throwable ->{
                            Log.d("TestItemData", "onErrorResumeNext -------- ");
                            return Observable.empty();
                         })
            .toList()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread());
Observable-Observable=apiTest
.performTest()
.FlatMapiteTable(项目->项目)
.flatMap(测试模型->{
尝试
{
返回apiTest.performTest2(testModel.userId);
}捕获(例外e)
{
返回apiTest.performTest3(testModel.userId);
}
}).doOnNext(testModel2->{Log.d(“TestItemData”,“doOnNext----”+testModel2.title);})
.onErrorResumeNext(可丢弃->{
Log.d(“TestItemData”、“OneRorResumeNext------”;
return-Observable.empty();
})
托利斯先生()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());

使用
OneRorResumeNext
(正如您稍后在流程中所做的那样):

Observable-Observable=apiTest
.performTest()
.FlatMapiteTable(项目->项目)
.flatMap(测试模型->
apiTest.performTest2(testModel.userId)
.onErrorResumeNext(e->apiTest.performTest3(testModel.userId));//{
Log.d(“TestItemData”、“doOnNext----”+testModel2.title);
})
.onErrorResumeNext(可丢弃->{
Log.d(“TestItemData”、“OneRorResumeNext------”;
return-Observable.empty();
})
托利斯先生()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());

使用
OneRorResumeNext
(正如您稍后在流程中所做的那样):

Observable-Observable=apiTest
.performTest()
.FlatMapiteTable(项目->项目)
.flatMap(测试模型->
apiTest.performTest2(testModel.userId)
.onErrorResumeNext(e->apiTest.performTest3(testModel.userId));//{
Log.d(“TestItemData”、“doOnNext----”+testModel2.title);
})
.onErrorResumeNext(可丢弃->{
Log.d(“TestItemData”、“OneRorResumeNext------”;
return-Observable.empty();
})
托利斯先生()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
Observable<List<TestModel2>> observable = apiTest
.performTest()
.flatMapIterable(items -> items)
.flatMap(testModel -> 
    apiTest.performTest2(testModel.userId)
    .onErrorResumeNext(e -> apiTest.performTest3(testModel.userId)); // <----------------
)
.doOnNext(testModel2 -> {
    Log.d("TestItemData", "doOnNext --- " + testModel2.title);
})
.onErrorResumeNext(throwable ->{
    Log.d("TestItemData", "onErrorResumeNext -------- ");
    return Observable.empty();
})
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());