RxJava timeout without emiting error?

You don't need to map errors with onErrorResumeNext. You can just provide a backup observable using:

timeout(long,TimeUnit,Observable)

It would be something like:

    .timeout(500, TimeUnit.MILLISECONDS, Observable.empty())

A simpler solution that does not use Observable.timeout (thus it does not generate an error with the risk of catching unwanted exceptions) might be to simply take until a timer completes:

Observable<String> data = ...
data.takeUntil(Observable.timer(1, TimeUnit.SECOND))
    .subscribe(...);

You can resume from an error with another Observable, for example :

 Observable<String> data = ...
 data.timeout(1, TimeUnit.SECONDS)
     .onErrorResumeNext(Observable.empty())
     .subscribe(...);