Getting error "Callable returned null" when using RxJava2

android, java, reactive-programming, rx-java, rx-java2

Solution

I used to have code like this:

Observable<R> obs = Observable.fromCallable(this::work);

work() may return `null` and as you noted, RxJava 2 is not happy with this.

Method 1

Observable<R> obs = Maybe.fromCallable(this::work).toObservable();

In this way, the end consumer - the observer - will only kick off if work() had anything to return. If work() returned null then it's the same as subscribing to an empty Observer; nothing happens.

Method 2

Observable<R> obs = Observable.create(e -> {
    R r = work();

    if (r != null) {
        e.onNext(r);
    }

    e.onComplete();
});

Method 3:

Wrapping each emission in an `Optional` = bad idea for a number of reasons.

Mainly because I only use Optional in my APIs if it is expected and sort of the "normal" scenario that you get a null every now and then. If null is not expected or very rare, maybe as a direct result of another API call done by the same consumer, then I return null and let the consumer deal with it in these exceptional cases rather than having every consumer deal with Optional all over the place.

Problem

I am using RxJava2 in my android project. I am using the following code to create the `Observable` ``` public Observable<AlbumDetails> loadAlbumFromAlbumId(final String albumId) { return Observable.fromCallable(new Callable<AlbumDetails>() { @Override public AlbumDetails call() throws Exception { AlbumDetails albumDetails = getAlbumDetails(albumId); return albumDetails; }); } ``` From the observable, I am getting following error in the onError method of DisposableObserver `Callable returned null` This didn't use to happend when using RxJava.

Original source