【发布时间】: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<BlogPostModel>而不是Response<List<BlogPostModel>>。但是你只能发出一个同步请求,如果你想发出一个异步请求,你需要将返回类型包装在Call中。
标签: java android kotlin mobile retrofit