【问题标题】:Retrofit @URL does not seem to work with Response<T> as the return type in API改造 @URL 似乎不适用于 Response<T> 作为 API 中的返回类型
【发布时间】:2020-06-27 04:22:23
【问题描述】:

失败的代码

API 类

@GET
  fun getBlogPosts(@Url url: String): Response<List<BlogPostModel>>

调用api

homeApi.getBlogPosts("hidden-url")

运行的代码

API 类

@GET
  fun getBlogPosts(@Url url: String): Call<List<BlogPostModel>>

调用api

homeApi.getBlogPosts("redacted-full-url").enqueue(callback)

为什么@URL 注释不能与 Response 一起使用?

错误

Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for retrofit2.Response<java.util.List<com.redacted.home.data.dataSources.remote.models.BlogPostModel>>

BlogPostModel 类

data class BlogPostModel(
  @Json(name = "id") val id: Long = 0,
  @Json(name = "title") val title: RenderedModel = RenderedModel(),
  @Json(name = "content") val content: RenderedModel = RenderedModel(),
  @Json(name = "jetpack_featured_media_url") val featuredImageUrl: String = "",
  @Json(name = "date") val date: String = "",
  @Json(name = "status") val status: String = "",
  @Json(name = "type") val type: String = "",
  @Json(name = "excerpt") val excerpt: RenderedModel = RenderedModel(),
  @Json(name = "link") val link: String = ""
)

data class RenderedModel(
  @Json(name = "rendered") val rendered: String = ""
)

【问题讨论】:

  • 这可能是因为Response 不适合在这里使用。尝试使用 List&lt;BlogPostModel&gt; 而不是 Response&lt;List&lt;BlogPostModel&gt;&gt;。但是你只能发出一个同步请求,如果你想发出一个异步请求,你需要将返回类型包装在Call中。

标签: java android kotlin mobile retrofit


【解决方案1】:

我通过调用 execute() 而不是 Call 来修复它(2020 年停止使用回调。)。

然后我选择了 flow on a IO Dispatcher 来克服主线程问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2011-01-09
    • 2023-03-14
    相关资源
    最近更新 更多