3

我正在尝试在Android中使用带有@Field和@FormurlEncoded的Retrofit 2 POST方法进行Api调用,但它在Android PIE中不起作用。

我之前已经使用改造集成了 APIs 数千次。但是这次我的目标是 sdk Android Pie 改造版本 2.6.1。

奇怪的是,同样的事情与@Body 一起工作得很好。

所以我经历了以下事情来检查它,但没有运气。我还认为 Android 9.0 可能会导致安全问题,但 @Body 部分也不应该能够成功运行。

https://square.github.io/retrofit/

Android 8:不允许明文 HTTP 流量

如何在改造中使用 ssl 证书发出 https 请求

https://developer.android.com/training/articles/security-config.html

我的配置

targetSdkVersion 29

retrofit2Version = '2.6.1'

网址- https://jsonplaceholder.typicode.com/posts

请求(哪个不起作用 - 为什么?)

@Headers({"Content-Type: application/json",
            "Cache-Control: no-cache"})
    @FormUrlEncoded
    @POST("/posts")
    Call<BinRespTempPost> post(@Field("title") String title,
                               @Field("body") String body,
                               @Field("userId") int userId);

正在工作的请求

@Headers({"Content-Type: application/json",
            "Cache-Control: no-cache"})
    @POST("/posts")
    Call<BinRespTempPost> post(@Body BinReqTempPost binReqTempPost);

回复

{
  id: 101,
  title: 'foo',
  body: 'bar',
  userId: 1
}

问题是为什么使用 @Body 调用 Api 成功,使用 @Field / @FormUrlEncoded 调用失败?

- - - - - 更新 - - - - -

URL 类型 - POST

失败响应 - Html 响应(500 错误)

4

0 回答 0