IllegalArgumentException: не удалось найти адаптер вызова для rx. Наблюдаемый RxJava, Retrofit2
Я получаю вышеуказанную ошибку при вызове остальных API. Я использую как retrofit2 и RxJava.
ServiceFactory.java
public class ServiceFactory {
public static <T> T createRetrofitService(final Class<T> clazz, final String endpoint){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(endpoint)
//.addConverterFactory(GsonConverterFactory.create())
.build();
T service = retrofit.create(clazz);
return service;
}
}
MovieService.java
public interface MovieService{
//public final String API_KEY = "<apikey>";
public final String SERVICE_END = "https://api.mymovies.org/3/";
@GET("movie/{movieId}??api_key=xyz")
Observable<Response<Movies>> getMovies(@Field("movieId") int movieId);
}
Внутри MainActivity
MovieService tmdbService = ServiceFactory.createRetrofitService(MovieService.class, MovieService.SERVICE_END);
Observable<Response<Movies>> responseObservable = tmdbService.getMovies(400);
responseObservable .subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Response<Movies>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Response<Movies> moviesResponse) {
}
});
5 ответов
Обязательно добавлю implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
или любую версию, которую вы используете для ваших зависимостей, а затем настройте модификацию с этим конвертером:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(endpoint)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
обновленный
RxJavaCallAdapterFactory
был переименован в RxJava2CallAdapterFactory. Поменял разрезанный выше.
Для использования RxJava2 compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
Для получения дополнительной информации об использовании https://github.com/JakeWharton/retrofit2-rxjava2-adapter
Вы должны использовать все зависимости Rx последней версии, здесь я использую версию 2 (например, rxjava2)
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
И добавьте еще одну вещь:
addCallAdapterFactory(RxJava2CallAdapterFactory.create())
в Retrofit Api клиент, как:
retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
.build();
Со страницы проекта Github:
Цитата Это теперь УСТАРЕЛО! У Retrofit 2.2 и новее есть собственный адаптер вызовов для RxJava 2: https://github.com/square/retrofit/tree/master/retrofit-adapters/rxjava2
теперь вам просто нужно включить в файл app/build.gradle:
compile 'com.squareup.retrofit2:adapter-rxjava2:latest.version'
В моем случае этого было достаточно, чтобы заменить
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
с
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())