java.lang.IllegalArgumentException:找不到 rx 的调用适配器。Single<com.squareup.okhttp.ResponseBody>



我在项目中使用 RxJava1 和 Retrofit2。大约 10% 的用户收到以下错误:

Caused by java.lang.IllegalArgumentException: Could not locate call                 
adapter for rx.Single<com.squareup.okhttp.ResponseBody>.
Tried:
* retrofit2.adapter.rxjava.RxJavaCallAdapterFactory
* retrofit2.ExecutorCallAdapterFactory
at retrofit2.Retrofit.nextCallAdapter(Retrofit.java:237)
at retrofit2.Retrofit.callAdapter(Retrofit.java:201)
at retrofit2.ServiceMethod$Builder.createCallAdapter(ServiceMethod.java:232)
at 
retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:160)
at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:166)
at retrofit2.Retrofit$1.invoke(Retrofit.java:145)
at java.lang.reflect.Proxy.invoke(Proxy.java:913)
...

相关代码片段如下:

import rx.Single

val retrofit = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(BuildConfig.API_BASE_URL)
.build()

@FormUrlEncoded
@POST("/example")
fun exampleFun(@Field("param") param1: String): Single<ResponseBody>

implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
implementation 'com.squareup.retrofit2:retrofit:2.1.0'

我已经发现了类似的问题,但这不是同一个问题。

  • 这些解决方案将改用RxJava2CallAdapterFactoryRxJavaCallAdapterFactory但我使用 RxJava1。
  • 另一件奇怪的事情 是这个问题只影响我的 10% 的用户

最后我Single更改为Observable,现在它工作正常。但是,如果有人知道更好的解决方案,请告诉我!

相关内容

最新更新