mRestService.postLocations(locations) emit one item, then complete. If an error occur, then it emit the error, which complete the stream.

As you call this method in a flatMap , the error continue to your "main" stream, and then your stream stops.

What you can do is to transform your error into another item (as described here : https://stackoverflow.com/a/28971140/476690 ), but not on your main stream (as I presume you already tried) but on the mRestService.postLocations(locations) .

This way, this call will emit an error, that will be transformed to an item/another observable and then complete. (without calling onError ).

On a consumer view, mRestService.postLocations(locations) will emit one item, then complete, like if everything succeed.