【问题标题】:Unable to create call adapter for retrofit2.Response<...>无法为 retrofit2.Response<...> 创建调用适配器
【发布时间】:2020-06-19 06:59:00
【问题描述】:

我的 API:

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

尝试调用 API 时出现异常:

java.lang.IllegalArgumentException:无法创建调用适配器 retrofit2.Response<...data.getmovieresponse> 对于方法 InstanceApi.getNotShownMovies 无法为 retrofit2.Response<...data.getmovieresponse> 创建调用适配器 对于方法 InstanceApi.getNotShownMovies

我不知道从哪里开始。所有其他 API 调用都可以正常工作,这也在同一个 API 类中定义。可能是模型错误?

【问题讨论】:

  • 如何创建 ApiService?
  • 您在服务中工作的其他方法被包裹在Response&lt;&gt;Call&lt;&gt;?
  • val retrofit = Retrofit.Builder() .client(client) .baseUrl(url) .addConverterFactory(MoshiConverterFactory.create()) .build() return retrofit.create(Api::class.java )
  • 所有方法都用Response&lt;&gt;包裹
  • 另外,你为什么用Response&lt;GetMovieResponse&gt;而不是Response&lt;Movie&gt;

标签: android retrofit2 moshi


【解决方案1】:

如果使用coroutines,只需添加suspend 修饰符。这样就可以解决问题了。

否则您的问题很可能是因为在实例化您的 Retrofit 对象时没有添加调用适配器。 例如,对于RxJava2,您可以通过在构建时添加此行来包含呼叫适配器。

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

【讨论】:

  • 如果你正在使用协程,那么在你的函数之前包含关键字suspend。我也相信您只需将数据类包装在 Response 中。
  • 是的,此错误消息对于识别缺少的 suspend 毫无帮助。
  • 错过了这个 API 的暂停,非常感谢。
  • 非常感谢,,,,, 我已经尝试了一整天,它缺少 Suspend 用于 api 功能
  • @SuhadBinZubair 我遇到了同样的问题,在改造 API 调用中缺少挂起。这样做了,效果很好。
猜你喜欢
  • 2017-06-09
  • 2017-06-22
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 2017-04-19
相关资源
最近更新 更多