【发布时间】:2016-02-25 04:32:23
【问题描述】:
我将 Retrofit 与 RxJava Observables 和 lambda 表达式一起使用。我是 RxJava 新手,不知道如何执行以下操作:
Observable<ResponseBody> res = api.getXyz();
res.subscribe(response -> {
// I don't need the response here
}, error -> {
// I might be able to handle an error here. If so, it shall not go to the second error handler.
});
res.subscribe(response -> {
// This is where I want to process the response
}, error -> {
// This error handler shall only be invoked if the first error handler was not able to handle the error.
});
我查看了error handling operators,但我不明白他们如何帮助我处理我的用例。
【问题讨论】:
-
首先,您现在的代码将执行网络请求两次,每个订阅者一次 - 原因是 Retrofit 返回“冷” Observables,它只会在某些订阅者时执行订阅他们。除此之外,您能否解释一下您想要实现的目标?这两个订阅是否属于不同的类别?在每种情况下“处理”错误是什么意思?而且,也许
onErrorResumeNext是您想要的 - 它可以检查错误是否可以在那里“处理”,然后传递错误或执行其他操作... -
是的,两个订阅属于不同的类。我尝试做这样的事情:为 api-request(-response) 创建 observable。然后将该可观察对象传递给附加一些通用错误处理程序并返回(或新的)可观察对象的函数。最后,订阅以获取 api 响应或处理通用错误处理程序未处理的任何错误。
标签: java error-handling rx-java observable retrofit2