android 无法为retrofit2创建调用适配器,响应< ...>

irtuqstp  于 2022-11-27  发布在  Android
关注(0)|答案(3)|浏览(504)

我的Api:

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

尝试调用API时出现异常错误:

异常错误:无法为retrofit2创建调用适配器。<...data.GetMovieResponse>方法InstanceApi的响应。getNotShownMovies无法为retrofit2创建调用适配器。<...data.GetMovieResponse>方法InstanceApi的响应。getNotShownMovies
我不知道从哪里开始。所有其他的API调用工作正常,也是在同一个API类中定义的。也许是模型错误?

zzlelutf

zzlelutf1#

如果使用coroutines,只需添加suspend修饰符。这将解决问题。
否则,您的问题很可能是因为在示例化Retrofit对象时没有添加调用适配器。例如,对于RxJava2,您可以通过在构建它时添加此行来包括调用适配器。

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

np8igboo2#

我有一个类似的崩溃IllegalArgumentException: Call return type must be parameterized as Call
崩溃日志:

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

我发现它是崩溃的,因为proguard/R8。Proguard是重命名改造类,为了修复它,我更新了Proguard设置:

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

6za6bjd03#

在Gradle文件中,将此行添加到release buildTyps中

  • 启用最小值false

相关问题