I have created two observables..
One of them throws an exception.
obs1 = Observable.from(new Integer[]{1, 2, 3, 4, 5, 6});
obs2 = Observable.create(new Observable.OnSubscribe<Integer>() {
@Override public void call(Subscriber<? super Integer> subscriber) {
boolean b = getObj().equals(""); // this throws an exception
System.out.println("1");
}
});
I invoke them using
Observable.zip(obs2, obs1, new Func2<Integer, Integer, Object>() {
@Override
public ArrayList<Integer> call(Integer integer1, Integer integer2) {
ArrayList<Integer> integers = new ArrayList<Integer>();
integers.add(integer1);
integers.add(integer2);
return integers;
}
}).subscribe(new Observer<Object>() {
@Override public void onCompleted() {
System.out.println("onCompleted");
}
@Override public void onError(Throwable throwable) {
System.out.println("onError");
}
@Override public void onNext(Object o) {
System.out.println("onNext - " + o);
}
});
Now, I dont want my process to halt completely when an exception occurs -
I want to handle it and I want obs1 to continue its work.
I have tried to write it using onErrorResumeNext(), onExceptionResumeNext(), doOnError() but nothing helped - obs1 did not run.
How can I handle the exception without stopping the other observable from being processed?
You need to use onErrorResumeNext() or similar methods on obs2, not on the result of zipping obs1 and obs2 because it is then too late. Use something like Observable.zip(obs1, obs2.onErrorResumeNext(…), …).