Unable to create call adapter for io.reactivex.Observable

Solution 1:

You need to tell Retrofit that you want to use RxJava 2, using:

addCallAdapterFactory(RxJava2CallAdapterFactory.create())

So, for creating your Retrofit object, you will have something like:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(SERVICE_ENDPOINT)
    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
    .build();

Solution 2:

I ran into the same issue. Instead of adding new repositories you can add the dependency of Jake Wharton's library:

implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'

Then you can add factory:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.example.com")
    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
    .build();

The fact that adapter has version 2.. does not mean that it is intended for use with RxJava 2, as I thought.

implementation 'com.squareup.retrofit2:adapter-rxjava2:2.1.0'

Solution 3:

The problem is with the library being used.

I have replaced

implementation 'com.squareup.retrofit2:adapter-rxjava:2.4.0'

with

implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'

and used

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL).client(client)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();