改造获取请求返回 null

Posted

技术标签:

【中文标题】改造获取请求返回 null【英文标题】:retrofit get request returns null 【发布时间】:2022-01-05 23:00:45 【问题描述】:

我使用从新闻 api 中提取文章并在我的项目中使用分页 3 库显示它们,但由于某种原因,@GET 请求返回我的响应类,但带有 null 变量,尽管在我在新闻 api 网站上的个人资料中显示有一个请求。

NewsApi 类:

interface NewsApi 

companion object
    const val CLIENT_ID = "356d64b4bfde4cd492ef415beabba030"
    const val BASE_URL = "https://newsapi.org/"


@Headers("X-Api-Key: $CLIENT_ID")
@GET("v2/everything")
suspend fun searchArticles (
    @Query("q") query: String,
    @Query("page") page: Int,
    @Query("pageSize") pageSize: Int,
) : NewsResponse

我的响应类:

data class NewsResponse (
val results: List<NewsArticle>)

【问题讨论】:

这是不可能的,因为返回类型不可为空。它将返回 Response 类的实例或抛出异常。是什么让您信服返回值为 null?你是如何检索它的? 在描述中我说它返回一个带有空变量(列表)的对象。只是不想在标题中解释这一点 该列表也不能为空。无论如何,您可以先尝试在网络浏览器中发出相同的请求,看看是否能得到预期的响应。 在浏览器中有效 你能分享一下回复吗? 【参考方案1】:

我尝试了您的 api 并获取结果, 你的 Api 很好,问题是你试图得到结果

data class NewsResponse (
val results: List<NewsArticle>)

当结果实际上是这样形成时:


"status":"ok",
"totalResults":14925,
"articles":[

"author":"Igor Bonifacic",
"title":"University of ",
"description":"In aide built a robot to com…"

]

所以把你的结果改成:

data class NewsResponse(
    val status : String,
    val totalResults: Int,
    val articles: List<NewsArticle>
)

data class NewsArticle(
    val author: String,
    val description: String
)

【讨论】:

以上是关于改造获取请求返回 null的主要内容,如果未能解决你的问题,请参考以下文章

改造响应主体提交返回 null,但日志拦截器在 logcat 中显示完整响应

React - Axios 获取请求将数据返回为 NULL

改造获取多个请求的最后一个请求

改造 2:从响应正文中获取 JSON

Rxjava 2 - 使用领域和改造获取数据

Java请求一个URL。获取网站返回的数据。