美文网首页
android OKhttp 参数 传递数组类型

android OKhttp 参数 传递数组类型

作者: LQJJQ | 来源:发表于2018-04-04 19:02 被阅读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(网址)

    以上代码,可以看出 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 (Stringkey: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

    相关文章

      网友评论

          本文标题:android OKhttp 参数 传递数组类型

          本文链接:https://www.haomeiwen.com/subject/hwrlhftx.html