在android改造中,RequestBody始终为null

时间:2017-04-08 13:53:40

标签: android retrofit

我想在我的android项目中发送原始请求正文。如果我为@Body部分使用String,它包含""所以这是错的。为了解决这个问题,我在@Body部分使用了RequestBody,并创建了像

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

问题是,当我查看改造日志时,请求正文是“空白”。如下:

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);

2 个答案:

答案 0 :(得分:1)

对于遇到此问题的其他人,不要使用RequestBody,而应使用扩展TypedOutput的类,例如TypedStringTypedFile和{{1} }。

请参见TypedByteArray第372行,其中翻新检查主体是否为RequestBuilder,否则将主体视为可以使用标准(例如Json)转换器序列化的POJO。因此,我相信TypedOutput仅应用于Retrofit 2.0 +

例如替换

RequestBody

使用

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

答案 1 :(得分:0)

Finally I had to upgrade to retrofit 2.x and the solution on this link solve my problem. It doesn't need to create RequestBody anymore.