IllegalArgumentException:找不到rx.Observable RxJava,Retrofit2的调用适配器

时间:2016-02-05 20:43:50

标签: android rx-java 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 个答案:

答案 0 :(得分:46)

请务必将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。改变了上面的剪辑。

答案 1 :(得分:13)

对于RxJava2使用compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'

.addCallAdapterFactory(RxJava2CallAdapterFactory.create())

有关使用情况的更多信息https://github.com/JakeWharton/retrofit2-rxjava2-adapter

答案 2 :(得分:6)

您必须使用最新版本的所有 Rx 依赖关系,此处我使用的是 2 版本(例如 rxjava2

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

implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'io.reactivex.rxjava2:rxjava:2.1.9'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'

enter image description here

再添加一件事:

addCallAdapterFactory(RxJava2CallAdapterFactory.create())

在Retrofit Api客户端 喜欢:

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

答案 3 :(得分:1)

从上述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'

答案 4 :(得分:1)

在我的情况下,它足以取代

.addCallAdapterFactory(RxJavaCallAdapterFactory.create())

.addCallAdapterFactory(RxJava2CallAdapterFactory.create())