Android Okhttp使用总结

创建OkHttpClient mOkHttpClient=new OkHttpClient.Builder(); 设置网络配置,SSl认证(TrustManager[])等

一.get请求:

   ①同步:

   String url = getUrlAddParams(trueUrl,Map param);//get请求的参数要自己组装在url里;

   Request request = new Request.Builder().url(url).build();

   //new Request.Builder(),默认method为get;

   也可以链式调用 new  Request.Builder().url(url).get().build()

  执行:

   Call call = mOkHttpClient.newCall(request);

   Response response = call.execute();

   if(response.isSuccessful()) {

   result = response.body().string();

    }else{

      throw new IOException("Unexpected code "+ response);

   }

  请求是在子线程中执行的,可使用handler回调到UI界面再更新UI

//get请求参数组装

private String getUrlAddParams(String url, Map param) {

String urls = url;

Map<String, Object> map = aram;

if(map ==null) {

return urls ;

}

Set<String> ks = map.keySet();

for(String key : ks) {

String value = (String) map.get(key);

urls = appendParams(urls, key +"="+ value);

}

return urls;

}

/**

* 给url添加参数

*/

private String appendParams(String url, String params) {

if (TextUtils.isEmpty(url) || TextUtils.isEmpty(params)) {

return url;

}

if (url.contains("?")) {

// url中已经有参数

      return url +"&" + params;

}else {

// url中没有参数

      return url +"?" + params;

}

}

   ②异步:

   区别在于不直接execute,而是添加到队列,进行回调,ResponseCallBack继承Callback

    mOkHttpClient.newCall(request).enqueue(new ResponseCallBack(callback));

    注意:真正请求时,要在自定义UI层的回调接口CustomCallback传入,ResponseCallBack第一层回调时,调用CustomCallback的各接口方法

可参考自己的项目或者https://blog.csdn.net/u013210620/article/details/52397690

二.post请求:

   ①同步:

//下面以FormBody为例,postBody一般分两种:FormBody、

另一种为MediaType是Json格式的自定义Body;

String mediaType=  MediaType.parse("application/json; "+"charset=UTF-8")

RequestBody rq = RequestBody.create(mediaType, JsonUtil.objectToJson(param));//JsonUtil为自定义Json工具类

//get请求参数组装

private Request buildPostRequst(String url, Map params){

FormBody.Builder builder = new FormBody.Builder();

Map map = params;

if(map !=null) {

Set<String> ks = map.keySet();

for(String key : ks) {

String value = (String) map.get(key);

builder.add(key, value);

}

}

return new Request.Builder().url(url).post(builder.build()).build();

}

参数:一般为Map

Request postRequst = buildPostRequst(XX,Map params);

执行:

同 get请求的①同步

   ②异步:

执行:

同 get请求的②异步

   同步、异步之上传文件至服务器:

         需要用到okio,参考https://blog.csdn.net/u013210620/article/details/52422221

文件上传的参数封装要用到MultipartBody:

    实体类是FileEntity为自己对File管理的实体类,关键属性:fileUrl

private RequestBody getRequestBody(Map map, List fileEntities) {

MultipartBody.Builder builder =new MultipartBody.Builder();//创建MultipartBody

builder.setType(MultipartBody.FORM);

// .Builder,用于添加请求的数据

for(Map.Entry entry : map.entrySet()) {//对键值对进行遍历

builder.addFormDataPart(entry.getKey(), entry.getValue());//把键值对添加到Builder中

}

if(!ListUtil.isEmpty(fileEntities)) {

for(inti =0; i < fileEntities.size(); i++) {//对文件进行遍历

File file =new File(fileEntities.get(i).fileUrl);//生成文件

String fileType =getMimeType(file.getName());//根据文件的后缀名,获得文件类型

builder.addFormDataPart(//给Builder添加上传的文件

fileEntities.get(i).fileNameKey,//请求的名字

file.getName(),//文件的文字,服务器端用来解析的

RequestBody.create(MediaType.parse(fileType), file)//创建RequestBody,把上传的文件放入

);

}

}

return builder.build();//根据Builder创建请求

}

private static String getMimeType(String fileUrl) {

FileNameMap filenameMap = URLConnection.getFileNameMap();

String contentType = filenameMap.getContentTypeFor(fileUrl);

if(contentType ==null) {

contentType ="application/octet-stream";//* exe,所有的可执行程序

}

return contentType;

}

   异步下载图片、文件:

           参考https://blog.csdn.net/u013210620/article/details/52402199

    Okhttp拦截器的使用:

            Okhttp监听网络请求:参考https://github.com/jgilfelt/chuck

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容