首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >retrofit2和rxjava3: java.lang.IllegalArgumentException:无法找到io.reactivex.rxjava3.core.Observable的调用适配器

retrofit2和rxjava3: java.lang.IllegalArgumentException:无法找到io.reactivex.rxjava3.core.Observable的调用适配器
EN

Stack Overflow用户
提问于 2020-07-23 13:26:31
回答 1查看 2.2K关注 0票数 3

我想使用retrofit2和rxjava3,但是我看到了以下错误

代码语言:javascript
运行
复制
Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for io.reactivex.rxjava3.core.Observable<java.lang.Object>.
      Tried:
       * retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
       * retrofit2.CompletableFutureCallAdapterFactory
       * retrofit2.DefaultCallAdapterFactory

此错误表示Rxjava没有适配器,但我在下面的行中添加了该适配器。

.addCallAdapterFactory(RxJava2CallAdapterFactory.create())

代码语言:javascript
运行
复制
public class ServiceGenerator {
  private static final String BASE_URL = "http://example.com/";
  private static final OkHttpClient okHttpClient = new OkHttpClient.Builder()

    .connectTimeout(30, TimeUnit.SECONDS)
    .writeTimeout(30, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .build();

  public static <S> S createServiceSample(Class<S> serviceClass) {
    Retrofit.Builder builder =
      new Retrofit.Builder()
        .client(okHttpClient)
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .addConverterFactory(GsonConverterFactory.create());
    builder.baseUrl(BASE_URL);
    Retrofit retrofit = builder.build();
    return retrofit.create(serviceClass);
  }

}

还有我的ApiInterface

代码语言:javascript
运行
复制
public interface ApiInterface {
  @Headers("Content-Type: application/json")
  @GET("api/v1/movies?q=[]&page=[1]")
  Observable<Object> check();
}

在活动中使用

代码语言:javascript
运行
复制
  ApiInterface apiInterface = ServiceGenerator.createServiceSample(ApiInterface.class);
    Observable<Object> cryptoObservable = apiInterface.check();
    cryptoObservable.subscribeOn(Schedulers.newThread())
      .observeOn(AndroidSchedulers.mainThread())
      .subscribe(new Observer<Object>() {
        @Override
        public void onSubscribe(@NonNull Disposable d) {
          Log.i(TAG, "onSubscribe: ");
        }

        @Override
        public void onNext(@NonNull Object o) {
          Log.i(TAG, "onNext: " + new Gson().toJson(o));

        }

        @Override
        public void onError(@NonNull Throwable e) {
          Log.i(TAG, "onError: ");
        }

        @Override
        public void onComplete() {
          Log.i(TAG, "onComplete: ");
        }
      });

和build.gradle

代码语言:javascript
运行
复制
    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
    implementation 'io.reactivex.rxjava3:rxjava:3.0.4'

    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

    implementation 'com.google.code.gson:gson:2.8.2'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-23 13:26:31

您只需替换build.gradle中的以下一行

代码语言:javascript
运行
复制
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'

用这条线

代码语言:javascript
运行
复制
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0'

并替换ServiceGenerator中的以下行

代码语言:javascript
运行
复制
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())

用这条线

代码语言:javascript
运行
复制
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())

对我来说很管用

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63055413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档