关闭

android OKhttp 参数 传递数组类型

标签: okhttppost数组传参androidget
3647人阅读 评论(0) 收藏 举报
分类:

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



0
5

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:19266次
    • 积分:519
    • 等级:
    • 排名:千里之外
    • 原创:34篇
    • 转载:2篇
    • 译文:0篇
    • 评论:6条
    最新评论