遇到 error
事件 根据 retryWhen
的回调来确定是否重试。
官方示例:
Observable<Long> source = Observable.interval(0, 1, TimeUnit.SECONDS)
.flatMap(new Function<Long, ObservableSource<Long>>() {
@Override
public ObservableSource<Long> apply(Long x) throws Exception {
if (x >= 2) {
return Observable.error(new IOException("Something went wrong!"));
} else {
return Observable.just(x);
source.retryWhen(new Function<Observable<Throwable>, ObservableSource<?>>() {
@Override
public ObservableSource<?> apply(Observable<Throwable> throwableObservable) throws Exception {
return throwableObservable.map(new Function<Throwable, Integer>() {
@Override
public Integer apply(Throwable throwable) throws Exception {
return 1;
}).scan(new BiFunction<Integer, Integer, Integer>() {
@Override
public Integer apply(Integer integer, Integer integer2) throws Exception {
return integer + integer2;
}).doOnNext(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
System.out.println("No. of errors: " + integer);
}).takeWhile(new Predicate<Integer>() {
@Override
public boolean test(Integer integer) throws Exception {
return integer < 3;
}).flatMapSingle(new Function<Integer, SingleSource<?>>() {
@Override
public SingleSource<?> apply(Integer integer) throws Exception {
return Single.timer(integer, TimeUnit.SECONDS);
}).blockingSubscribe(new Consumer<Long>() {
@Override
public void accept(Long x) throws Exception {
System.out.println("onNext: " + x);
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
throwable.printStackTrace();
}, new Action() {
@Override
public void run() throws Exception {
System.out.println("onComplete");
onNext: 0
onNext: 1
No. of errors: 1
onNext: 0
onNext: 1
No. of errors: 2
onNext: 0
onNext: 1
No. of errors: 3
onComplete
转载请以链接形式标明出处:本文出自:103style的博客异常捕获相关的操作符 以及 官方介绍RxJava 之 异常捕获操作符 官方介绍 :Error Handling OperatorsdoOnErroronErrorCompleteonErrorResumeNextonErrorReturnonErrorReturnItemonExcept...
代码如下:[removed] try{ …some code… }catch(e){ …some code… //处理错误 throw(e.name); //抛出异常 }finally{<BR> // 完成后执行的语句块,非必须<BR>} [removed]
javascript Error 对象:
name: 错误名称number: 错误号description: 描述信息 message: 错误信息 fileName: 错误发生的文件 stack: 错误发生时的调用堆栈
转发https://www.jianshu.com/p/d9da64774f7b
项目里使用flatmap,报错:NetworkOnMainThread
这是由于ApiRetrofit.getInstance().getUserInfoById(friendId) 是运行在主线程中。
改成:return ApiRetrofit.getInstance().getUserInfoById(frien...
RxJavaPlugins.setErrorHandler(throwable -> {
DLog.e(TAG,"throwable="+throwable.getMessage());
Rxjava 中 捕获的异常都会在这里显示
1.java.io.InterruptedIOExceptio...
RxJava链式调用异步请求map变换操作符给大家实现android MVP结构的组织带来了极大的便利。
优美的代码,让复杂的业务逻辑清晰明了,同时也方便了代码的跟踪、问题的定位。
当我们在业务实现中出现业务异常的时候,app并没有崩溃,但是我们的后续业务执行却没有体现在界面上。
这个时候非常难定位问题的根源在哪里,因为我们的lo...
catch
Catch类似于java中的try/catch,当错误发生的时候,可以拦截对onError的调用,让Observable不会因为错误的产生而终止。在Rxjava中,将这个操作符实现为3个操作符,分别是:
onErrorReturn
当发生错误的时候,让Observable发射一个预先定义好的数据并正常地终止
Java中的异常处理机制是通过try-catch语句来实现的。try块中包含可能会抛出异常的代码,catch块则用来捕获并处理这些异常。
当try块中的代码抛出异常时,程序会跳转到与之匹配的catch块中。catch块中的代码会处理异常,并根据需要进行恢复或报告错误。
在Java中,异常分为两种类型:受检异常和非受检异常。受检异常必须在方法签名中声明,而非受检异常则不需要。
在使用try-catch语句时,需要注意以下几点:
1. catch块中的代码必须能够处理try块中可能抛出的异常。
2. catch块中的代码应该尽可能地简洁,以避免引入新的错误。
3. 可以使用多个catch块来处理不同类型的异常。
4. 可以使用finally块来执行一些必须的清理工作,无论是否发生异常。
总之,try-catch语句是Java中异常处理的核心机制之一,它可以帮助我们更好地处理程序中可能出现的异常情况,提高程序的健壮性和可靠性。