I have an observable generated from retrofit that I am trying to implement error handling for, specifically connection timeouts. The subscribers on error gets called just fine but the app still crashes with a sockettimeout error. Any advice?
Observable<History> history = api.returnHistoryRX(pair, String.valueOf(unixTime-3600), String.valueOf(unixTime));
history.onErrorReturn(throwable -> null);
subscriber
public void getPriceNow(Observable<List<history>> history, String pair) {
Timestamp timestamp2;
timestamp2 = new Timestamp(System.currentTimeMillis());
history.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(history1 -> {
String currentValue;
if (history1.size()>0){
System.out.println("testing rx");
}
}, e->System.out.println("getPriceNow: error called"));
}
To Test I am setting the timeout to something unreasonably low with okhttp
private OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.MILLISECONDS)
.readTimeout(30L, TimeUnit.MILLISECONDS)
.writeTimeout(100L, TimeUnit.MILLISECONDS);
The error chain looks like this:
java.lang.IllegalStateException: Exception thrown on Scheduler.Worker thread. Add onError handling.
Caused by: rx.exceptions.OnErrorNotImplementedException: failed to connect
Caused by: java.net.SocketTimeoutException: failed to connect