【问题标题】:how to put query string in Retrofit 2如何将查询字符串放入 Retrofit 2
【发布时间】:2016-11-17 10:47:01
【问题描述】:

您好,我需要在 Android 的 Retrofit 2 中实现这个 CURL 代码:

curl_setopt($ch, CURLOPT_POSTFIELDS, "username=myname&password=mypass");

我是这样使用改造的:

Call<ResponseBody> login(@Query("username") String username, @Query("password") String password);

但目标 API 只接受像 "username=myname&amp;password=mypass" 这样的字符串,而不是不同的参数。 如何使用 Retrofit 2 实现上面的 CURL 代码?

【问题讨论】:

  • application/x-www-form-urlencoded ?

标签: java android curl retrofit2


【解决方案1】:

使用 @Field 代替 @query 并在 Call 方法的开头添加 @FormUrlEncoded

【讨论】:

  • 是否显示任何错误,您是否尝试过在浏览器中使用邮递员工具调用该api?检查您是否已在清单中授予互联网权限
  • 是的。我通过php curl测试过,当数据是单个字符串时它可以工作,但是当数据是数组时,API无法识别参数。
  • 我不认为问题出在改造代码上,请检查您的脚本
  • 我不需要 urlencoded 数据,我需要一个字符串
【解决方案2】:

或许可以帮助遇到同样问题的人。
使用@QueryName可以放查询字符串。

Call<ResponseBody> login(@QueryName String queryString);

可能需要替换一些字符并添加Interceptor
参考: https://github.com/square/retrofit/issues/1199#issuecomment-307176224

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    相关资源
    最近更新 更多