简体   繁体   English

无法为 retrofit2.Response<...> 创建调用适配器

[英]Unable to create call adapter for retrofit2.Response<...>

My Api:我的 Api:

@GET("/cinema/notShownMovies")
fun getNotShownMovies(
   @Query("token") token: String
): Response<GetMovieResponse>

Exception when trying to call API:尝试拨打 API 时出现异常:

java.lang.IllegalArgumentException: Unable to create call adapter for retrofit2.Response<...data.GetMovieResponse> for method InstanceApi.getNotShownMovies Unable to create call adapter for retrofit2.Response<...data.GetMovieResponse> for method InstanceApi.getNotShownMovies java.lang.IllegalArgumentException:无法为 Retrofit2.Response<...data.GetMovieResponse> 方法 InstanceApi.getNotShownMovies 创建调用适配器

I don't know where to start.我不知道从哪里开始。 All other API calls work fine which is also defined in the same API class. Maybe a model error?所有其他 API 调用工作正常,它也在同一个 API class 中定义。也许是 model 错误?

Just add suspend modifier if using coroutines .如果使用coroutines只需添加suspend修饰符。 This will solve the problem.这将解决问题。

Otherwise your issue is likely because there is no Call adapter added when instantiating your Retrofit object.否则您的问题很可能是因为在实例化Retrofit object 时没有添加呼叫适配器。 For example, for RxJava2 , you can include a call adapter by adding this line while building it.例如,对于RxJava2 ,您可以通过在构建时添加此行来包含调用适配器。

.addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))

In the Gradle file add this line inside of release buildTyps在 Gradle 文件中,在 release buildTyps 中添加这一行

  • minifyEnabled false缩小启用假

I had a similar crash IllegalArgumentException: Call return type must be parameterized as Call .我有一个类似的崩溃IllegalArgumentException: Call return type must be parameterized as Call

Crash log:崩溃日志:

Caused by: java.lang.IllegalArgumentException: Unable to create call adapter for interface retrofit2.Call
    for method Api.login
    at retrofit2.Utils.methodError(Utils.java:54)
    at retrofit2.HttpServiceMethod.createCallAdapter(HttpServiceMethod.java:116)
    at retrofit2.HttpServiceMethod.parseAnnotations(HttpServiceMethod.java:67)
    at retrofit2.ServiceMethod.parseAnnotations(ServiceMethod.java:39)
    at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:202)
    at retrofit2.Retrofit$1.invoke(Retrofit.java:160)
    at java.lang.reflect.Proxy.invoke(Proxy.java:1006)
    at $Proxy0.login(Unknown Source)
    at <redacted>.screen.login.LoginActivity.onSignInClick(LoginActivity.java:103)
    ... 13 more
Caused by: java.lang.IllegalArgumentException: Call return type must be parameterized as Call<Foo> or Call<? extends Foo>
    at retrofit2.DefaultCallAdapterFactory.get(DefaultCallAdapterFactory.java:42)
    at retrofit2.Retrofit.nextCallAdapter(Retrofit.java:253)
    at retrofit2.Retrofit.callAdapter(Retrofit.java:237)
    at retrofit2.HttpServiceMethod.createCallAdapter(HttpServiceMethod.java:114)
    ... 20 more

I found out it was crashing because of Proguard/R8.我发现它因为 Proguard/R8 而崩溃。 Proguard was renaming Retrofit classes and to fix it I updated the Proguard settings with: Proguard 正在重命名 Retrofit 类并修复它我更新了 Proguard 设置:

-dontwarn retrofit2.**
-keep class retrofit2.** { *; }

找不到retrofit2.Response 的调用适配器<io.reactivex.single< div><div id="text_translate"><p> Android Studio 4.0</p><p> build.gradle:</p><pre> implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation "com.squareup.retrofit2:converter-gson:$retrofit_version" implementation "com.squareup.retrofit2:retrofit:2.6.0" implementation 'io.reactivex.rxjava2:rxjava:2.2.10' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'</pre><p> 配置 Retrofit:</p><pre> import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory import retrofit2.converter.gson.GsonConverterFactory private val builder = Retrofit.Builder().baseUrl(BuildConfig.API_BASE_URL).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).addConverterFactory(GsonConverterFactory.create(gson)).client(httpClient.build())</pre><p> 我的界面</p><pre>import com.myproject.androidtestproject.api.model.Film import io.reactivex.Single import retrofit2.Response import retrofit2.http.GET interface TestRxJavaRestClient { @GET("films") fun getFilms(): Response&lt;Single&lt;List&lt;Film&gt;&gt;&gt; } import io.reactivex.Single import retrofit2.Response class TransportServiceRxJava { companion object { private val testRxJavaRestClient = RestClientFactory.createRestClient(TestRxJavaRestClient::class.java) fun getFilms(): Response&lt;Single&lt;List&lt;Film&gt;&gt;&gt; { return testRxJavaRestClient.getFilms() } } }</pre><p> 在我的视图模型中:</p><pre> import io.reactivex.Single class FilmsRxJavaViewModel(application: Application): AndroidViewModel(application) { companion object { private val TAG = FilmsRxJavaViewModel::class.java.name } lateinit var filmsList: Single&lt;List&lt;Film&gt;&gt; init { Debug.d(TAG, "init:") //isShowProgress.value = true loadData() } fun loadData() { Debug.d(TAG, "loadData:") val response = TransportServiceRxJava.getFilms() val isSuccessResponse = response.isSuccessful if (isSuccessResponse) { // code &gt;= 200 &amp;&amp; code &lt; 300; filmsList = response.body()., } else { // error - status (300-599) or network failure Debug:w(TAG. "loadData_error. status (300-599) or network_failure") val message = response.errorResponse,message Debug:w(TAG, "loadData: message = $message") } } }</pre><p> 但我得到运行时错误:</p><pre> Process: com.myproject.androidtestproject.debug, PID: 6574 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myproject.androidtestproject.debug/com.myproject.androidtestproject.ui.activity.FilmsRxJavaActivity}: java.lang.RuntimeException: Cannot create an instance of class com.myproject.androidtestproject.viewmodel.FilmsRxJavaViewModel at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) Caused by: java.lang.RuntimeException: Cannot create an instance of class com.myproject.androidtestproject.viewmodel.FilmsRxJavaViewModel at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:275) at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150) at com.myproject.androidtestproject.ui.activity.FilmsRxJavaActivity.init(FilmsRxJavaActivity.kt:57) at com.myproject.androidtestproject.ui.activity.FilmsRxJavaActivity.onCreate(FilmsRxJavaActivity.kt:46) at android.app.Activity.performCreate(Activity.java:7802) at android.app.Activity.performCreate(Activity.java:7791) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)... 11 more Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:267)... 20 more Caused by: java.lang.IllegalArgumentException: Unable to create call adapter for retrofit2.Response&lt;io.reactivex.Single&lt;java.util.List&lt;com.myproject.androidtestproject.api.model.Film&gt;&gt;&gt; for method TestRxJavaRestClient.getFilms at retrofit2.Utils.methodError(Utils.java:52) at retrofit2.HttpServiceMethod.createCallAdapter(HttpServiceMethod.java:105) at retrofit2.HttpServiceMethod.parseAnnotations(HttpServiceMethod.java:66) at retrofit2.ServiceMethod.parseAnnotations(ServiceMethod.java:37) at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170) at retrofit2.Retrofit$1.invoke(Retrofit.java:149) at java.lang.reflect.Proxy.invoke(Proxy.java:1006) at $Proxy0.getFilms(Unknown Source) at com.myproject.androidtestproject.service.transport.TransportServiceRxJava$Companion.getFilms(TransportServiceRxJava.kt:21) at com.myproject.androidtestproject.viewmodel.FilmsRxJavaViewModel.loadData(FilmsRxJavaViewModel.kt:26) at com.myproject.androidtestproject.viewmodel.FilmsRxJavaViewModel.&lt;init&gt;(FilmsRxJavaViewModel.kt:21)... 23 more Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for retrofit2.Response&lt;io.reactivex.Single&lt;java.util.List&lt;com.myproject.androidtestproject.api.model.Film&gt;&gt;&gt;. Tried: * retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory * retrofit2.CompletableFutureCallAdapterFactory * retrofit2.DefaultCallAdapterFactory at retrofit2.Retrofit.nextCallAdapter(Retrofit.java:241) at retrofit2.Retrofit.callAdapter(Retrofit.java:205) at retrofit2.HttpServiceMethod.createCallAdapter(HttpServiceMethod.java:103)... 32 more</pre> </div></io.reactivex.single<> - Could not locate call adapter for retrofit2.Response<io.reactivex.Single

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 错误:IllegalArgumentException:无法为retrofit2.Response 创建调用适配器 - Error: IllegalArgumentException: Unable to create call adapter for retrofit2.Response RxAndroid 和 Retrofit:无法为 io.reactivex.Observable 创建调用适配器<retrofit2.Response<okhttp3.ResponseBody> &gt; - RxAndroid and Retrofit: Unable to create call adapter for io.reactivex.Observable<retrofit2.Response<okhttp3.ResponseBody>> 找不到retrofit2.Response 的调用适配器<io.reactivex.single< div><div id="text_translate"><p> Android Studio 4.0</p><p> build.gradle:</p><pre> implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation "com.squareup.retrofit2:converter-gson:$retrofit_version" implementation "com.squareup.retrofit2:retrofit:2.6.0" implementation 'io.reactivex.rxjava2:rxjava:2.2.10' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'</pre><p> 配置 Retrofit:</p><pre> import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory import retrofit2.converter.gson.GsonConverterFactory private val builder = Retrofit.Builder().baseUrl(BuildConfig.API_BASE_URL).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).addConverterFactory(GsonConverterFactory.create(gson)).client(httpClient.build())</pre><p> 我的界面</p><pre>import com.myproject.androidtestproject.api.model.Film import io.reactivex.Single import retrofit2.Response import retrofit2.http.GET interface TestRxJavaRestClient { @GET("films") fun getFilms(): Response&lt;Single&lt;List&lt;Film&gt;&gt;&gt; } import io.reactivex.Single import retrofit2.Response class TransportServiceRxJava { companion object { private val testRxJavaRestClient = RestClientFactory.createRestClient(TestRxJavaRestClient::class.java) fun getFilms(): Response&lt;Single&lt;List&lt;Film&gt;&gt;&gt; { return testRxJavaRestClient.getFilms() } } }</pre><p> 在我的视图模型中:</p><pre> import io.reactivex.Single class FilmsRxJavaViewModel(application: Application): AndroidViewModel(application) { companion object { private val TAG = FilmsRxJavaViewModel::class.java.name } lateinit var filmsList: Single&lt;List&lt;Film&gt;&gt; init { Debug.d(TAG, "init:") //isShowProgress.value = true loadData() } fun loadData() { Debug.d(TAG, "loadData:") val response = TransportServiceRxJava.getFilms() val isSuccessResponse = response.isSuccessful if (isSuccessResponse) { // code &gt;= 200 &amp;&amp; code &lt; 300; filmsList = response.body()., } else { // error - status (300-599) or network failure Debug:w(TAG. "loadData_error. status (300-599) or network_failure") val message = response.errorResponse,message Debug:w(TAG, "loadData: message = $message") } } }</pre><p> 但我得到运行时错误:</p><pre> Process: com.myproject.androidtestproject.debug, PID: 6574 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myproject.androidtestproject.debug/com.myproject.androidtestproject.ui.activity.FilmsRxJavaActivity}: java.lang.RuntimeException: Cannot create an instance of class com.myproject.androidtestproject.viewmodel.FilmsRxJavaViewModel at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) Caused by: java.lang.RuntimeException: Cannot create an instance of class com.myproject.androidtestproject.viewmodel.FilmsRxJavaViewModel at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:275) at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150) at com.myproject.androidtestproject.ui.activity.FilmsRxJavaActivity.init(FilmsRxJavaActivity.kt:57) at com.myproject.androidtestproject.ui.activity.FilmsRxJavaActivity.onCreate(FilmsRxJavaActivity.kt:46) at android.app.Activity.performCreate(Activity.java:7802) at android.app.Activity.performCreate(Activity.java:7791) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)... 11 more Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:267)... 20 more Caused by: java.lang.IllegalArgumentException: Unable to create call adapter for retrofit2.Response&lt;io.reactivex.Single&lt;java.util.List&lt;com.myproject.androidtestproject.api.model.Film&gt;&gt;&gt; for method TestRxJavaRestClient.getFilms at retrofit2.Utils.methodError(Utils.java:52) at retrofit2.HttpServiceMethod.createCallAdapter(HttpServiceMethod.java:105) at retrofit2.HttpServiceMethod.parseAnnotations(HttpServiceMethod.java:66) at retrofit2.ServiceMethod.parseAnnotations(ServiceMethod.java:37) at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170) at retrofit2.Retrofit$1.invoke(Retrofit.java:149) at java.lang.reflect.Proxy.invoke(Proxy.java:1006) at $Proxy0.getFilms(Unknown Source) at com.myproject.androidtestproject.service.transport.TransportServiceRxJava$Companion.getFilms(TransportServiceRxJava.kt:21) at com.myproject.androidtestproject.viewmodel.FilmsRxJavaViewModel.loadData(FilmsRxJavaViewModel.kt:26) at com.myproject.androidtestproject.viewmodel.FilmsRxJavaViewModel.&lt;init&gt;(FilmsRxJavaViewModel.kt:21)... 23 more Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for retrofit2.Response&lt;io.reactivex.Single&lt;java.util.List&lt;com.myproject.androidtestproject.api.model.Film&gt;&gt;&gt;. Tried: * retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory * retrofit2.CompletableFutureCallAdapterFactory * retrofit2.DefaultCallAdapterFactory at retrofit2.Retrofit.nextCallAdapter(Retrofit.java:241) at retrofit2.Retrofit.callAdapter(Retrofit.java:205) at retrofit2.HttpServiceMethod.createCallAdapter(HttpServiceMethod.java:103)... 32 more</pre> </div></io.reactivex.single<> - Could not locate call adapter for retrofit2.Response<io.reactivex.Single 翻新无法创建呼叫适配器 - Retrofit Unable to create call adapter Retrofit 无法创建呼叫适配器 - Retrofit is unable to create call adapter Retrofit 2.0:无法为类创建调用适配器 - Retrofit 2.0: Unable to create call adapter for class 无法在翻新版2.0.0中创建呼叫适配器 - Unable to create call adapter in retrofit 2.0.0 改造:无法创建适配器 - Retrofit :Unable to create adapter 无法为 class java.lang.Object - ZB9794896D299A7854021A 创建呼叫适配器 - Unable to create call adapter for class java.lang.Object - Retrofit 使用Retrofit2和Kotlin将数据发布到正文中:无法创建呼叫适配器 - Post data in body with Retrofit2 and Kotlin: Unable to create call adapter
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM