【问题标题】:RequestBody is always null in android retrofitRequestBody 在 android 改造中始终为空
【发布时间】:2017-04-08 13:53:39
【问题描述】:

我想在我的 android 项目中发送原始请求正文。如果我将字符串用于@Body 部分,它包含“”,所以这是错误的。为了解决这个问题,我使用 RequestBody 作为@Body 部分,并像

一样创建 RequestBody
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), "Test");

问题是当我查看改造日志时,请求正文为“null”,如下所示:

04-08 18:07:20.990 25886-25906/? D/Retrofit: ---> HTTP POST http://TestURL
04-08 18:07:20.990 25886-25906/? D/Retrofit: Content-Type: text/plain; charset=UTF-8
04-08 18:07:20.990 25886-25906/? D/Retrofit: Content-Length: 4
04-08 18:07:20.991 25886-25906/? D/Retrofit: null
04-08 18:07:20.991 25886-25906/? D/Retrofit: ---> END HTTP (4-byte body)

我搜索了很多,但找不到问题所在!我应该提一下,我使用的是 1.9 改造,目前无法切换到 2.x。

更新(添加一些代码):

@Headers("Content-Type: text/plain")
@POST("/GetUserInfo")
void GetUserInfo(@Body RequestBody request, Callback<UserInfo> callback);

【问题讨论】:

  • 显示完整代码?
  • @Caspain 你需要哪一部分?我现在将添加 Rest API 部分
  • 可以添加接收请求的网络服务吗?
  • @JeffersonTavares no webservice 对我不可用,我不明白这个问题的哪一部分与 webservice 有关?这是关于客户端部分,不是吗?
  • 这可能与您尝试访问的网络服务有关。例如,假设您的请求不完整,网络服务可能不会发回响应,这可能是您获得空值的原因

标签: android retrofit


【解决方案1】:

对于遇到此问题的其他任何人,不要使用RequestBody,而是使用扩展TypedOutput 的类,例如TypedStringTypedFileTypedByteArray

参见RequestBuilder 第372 行,其中retrofit 检查body 是否属于TypedOutput,否则将body 视为可以使用标准(例如Json)转换器序列化的POJO。因此,我认为 RequestBody 应该只用于 Retrofit 2.0+

例如替换

RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), "Test");

TypedString requestBody = new TypedString("Test");

【讨论】:

    【解决方案2】:

    最后我不得不升级到改造 2.x,this link 上的解决方案解决了我的问题。它不再需要创建 RequestBody。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-09
      • 2020-07-23
      • 2016-03-17
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      相关资源
      最近更新 更多