android OKhttp 参数 传递数组类型

1, 一直在使用okhttp 最近有参数要传递数组。

2,google , 源码中是使用 map 参数 key --value 进行存储的。进行重复性赋值的时候 最后一个会替换掉 前一个

3,最简答的是用拼接 URL 的方式进行传递  例如  http://www.baidu.com?a=1&a=2&a=3...... 这样 传递的是一个 int[] 类型的 数组

但是 大家都知道的 这种方式还是GET 传递参数,对参数的大小是有要求的。超过之后就会出现异常。 及时你.post (URL) 这样也是 get方式传参数。

如何用高雅的POST 方式 传递参数。

1 既然 okhttp 已经把传递 key LISTValues的方式限制住了。那么 就应该去找,客户端到底传送的是什么,其本质是什么,服务端接收的是什么,其本质又是什么。把这个搞清楚,就知道到底OKHHTTP 能不能进行数组的传递。

2,大家都知道 post 跟get最常用的是HTML 上,所以 我就查了下 HTML 是怎么传递数组的。

代码如下  

http://stackoverflow.com/questions/6243051/how-to-pass-an-array-within-a-query-string(网址)

<input type="hidden" name="cars[]" value="Volvo">
<input type="hidden" name="cars[]" value="Saab">
<input type="hidden" name="cars[]" value="Mercedes">
以上代码,可以看出 HTML 传递数组 就是把参数写成数组的形式,进行传递。

而服务端,当你传递的不是数组的时候 会告诉你 XX类强转成 XX[] 数组错误,那就可以猜测,服务端靠 一定的格式 去强转的。

所以如何仿照 post的 http表单去写这样的请求,脑补资料 https://imququ.com/post/four-ways-to-post-data-in-http.html



这里是 截取的 postman使用数组参数 进行的请求头的参数。

所以 我们只需要在代码中找到 对应的API 就可以了。按照这个区拼接 HTTP的请求。

我这里 是使用的 okHTTP

private void addParams(MultipartBody.Builder builder) {
    if (params != null && !params.isEmpty()) {
        for (String key : params.keySet()) {
            builder.addPart(Headers.of("Content-Disposition", "form-data; name=\"" + key.replaceAll("\\[\\d+\\]", "") + "\""),
                    RequestBody.create(null, params.get(key)));
        }
    }
}
然后就OK了

html这样写 有可能就是为了拼接这个才这样写的。 在postman中尝试,完美解决。传递过去 因为有 数组的标示 会把这个强转成数组。

使用第三方库的时候,最忌讳的就是 使用人家提高的方法,看都不看,对别人说 不支持,其实就像冰河世纪5 中黄数量说的那样,肯定是有办法解决的,只是我们现在没有找到。

就到这里吧,赶紧postman中试试吧

老规矩  QQ:973683374

好多人问啊,搞个开源吧

https://github.com/liqingju123/okhttpUtilsSendArrayString



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值