我的Api:
@GET("/cinema/notShownMovies")
fun getNotShownMovies(
@Query("token") token: String
): Response<GetMovieResponse>
尝试调用API时出现异常:
java. lang.IllegalArgumentException:无法为Retret2创建调用适配器。响应
我不知道从哪里开始。所有其他API调用工作正常,这也是在同一个API类中定义的。也许是模型错误?
如果使用协程
,只需添加挂起
修饰符。这将解决问题。
否则,您的问题可能是因为在实例化您的Retrofit
对象时没有添加Call适配器。例如,对于RxJava2
,您可以通过在构建时添加此行来包含调用适配器。
.addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
我有一个类似的崩溃IllegalArgumentException:调用返回类型必须参数化为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
我发现它崩溃是因为普罗卫士/R8。普罗卫士正在重命名改造类,为了修复它,我更新了普罗卫士的设置:
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
在Gradle文件中,将此行添加到release buildTyps中