Android Okhttp3 传递数组参数

android OKhttp 参数 传递数组类型 这一篇是基于弘扬写的okhttp3Util进行写的。有些Android开发是基于原生的okhttp3进行开发的。传递数组类型也是存在的。

说句实在话,我刚刚看下源码使用原生的进行数组传递,还是比较简单比较方便的。其本质是不管开发者是用什么样的方式去传递参数的,可以自定义的设置。

跟android OKhttp 参数 传递数组类型博客是一样的。

传递数组分两种形式 

第一种:写到URL的后面,例如:http://www.baidu.com?key=1&key=2&key=3 穿到后台接收就是 int[] key的形式。

这种方式的弊端就是数据不能大于64K。64K是 get传递参数的最大值,就像Android的方法不能超过64k一样。有人认为 我方式是用的Post啊 能不能超过64K, 答案很明确 不能。URL传输数据最大值是64K。

第二种:是使用form表单的形式进行,form表单对大小是没有限制的。问题是怎么构建form表单,一些Android开发者是没有前端开发经验的。

关于如何构建from表单,form表单具体长什么样子,你看下android OKhttp 参数 传递数组类型这篇博客吧。

下面我就说下 okhttp3如何构建一个form表单。

注意,这里一定是 new String("")进行存key的值。


 /**
     * map identityHashMap = new IdentityHashMap<>()
     * identityHashMap.put(new String("key"),"value1")
     * identityHashMap.put(new String("key"),"value2")
     * 这里一定是 new String("")进行存key的值。IdentityHashMap 存住的是可重读key 但是 内部对比的是 key的地址,而不是hash值
     * 也就是说内部使用的是 ==做的比对 大家有兴趣可以自己点进去看下 put的方法
     *     
     *
     * @param identityHashMap
     * @return
     */
    public MultipartBody multipartBodyData(IdentityHashMap identityHashMap){
MultipartBody.Builder requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM);
if(identityHashMap ==null || identityHashMap.size() ==0){
            return requestBody;
        }
        
        for (String key :identityHashMap.keySet()){
            requestBody.addFormDataPart(key,identityHashMap.get(key));

        }

        return requestBody.build();
    }

急着赶项目的 看到这里就行了。拿着去用吧。

接着看,一般okhttp3的请求到这里应该是构建一个formBody的表单。

看下网上流行的例子都是怎么构建的。

FormBody.Builder formBody = new FormBody.Builder();
这个没毛病,点进去看下。
前两行代码是这样的写的,看到这里就不用往下看了。肯定是拼接URL的方式进行传参的。

Android Okhttp3 传递数组参数_第1张图片

这是一个拼接URL的方法。

所以你下面在调用get。或者post。都是拼接URL的方式进行的。这样也是能传递过去的。

但是我就想用formDate的格式进行传递。咱们看下。他是如何定义这个传递方式的。

okhttp3 提供了MultipartBody 也是RequestBody的子类,这个需要你自定义,setType() 就是对你的类型进行自定义设置。

public static final MediaType FORM = MediaType.parse("multipart/form-data");
看到有这个类型,也就是一开始贴的那一单代码设置的类型。

设置完参数之后获取到的就是requestBody了。接下来就是可以愉快地设置参数了

总结: 自己多看看源码,多看看Android周边的开发。这样给自己定位问题,解决问题都能带来很好地帮助。让自己的军火库里的武器多起来。消灭敌人的把握就大一些


你可能感兴趣的:(Android开发源码解析)