OkHttp3的简单使用(二)

OkHttp3的简单封装

public class OkHttpUtil {   public static final String TAG="OkHttpUtil";   private static OkHttpClient client;   private static OkHttpUtil httpUtil;

private OkHttpUtil(){      client=new OkHttpClient.Builder()            .connectTimeout(10, TimeUnit.SECONDS)            .readTimeout(10,TimeUnit.SECONDS)            .build();   }

// 使用单例模式,保证只有一个OkHttpUtil和OkHttpClient 的实例。   public static OkHttpUtil getInstance(){      synchronized (OkHttpUtil.class){         if(httpUtil==null){            httpUtil= new OkHttpUtil();            return httpUtil;         }      }      return httpUtil;   }

/**    * get异步请求    * @param url    */   public static void getData(String url){      Request request=new Request.Builder().url(url)            .build();      client.newCall(request).enqueue(new Callback() {         @Override         public void onFailure(Call call, IOException e) {

}

@Override         public void onResponse(Call call, Response response) throws IOException {            //字符串类型            Log.i(TAG, "getData: " + response.body().string());            //字节数组类型            Log.i(TAG, "getData: " + response.body().bytes());            //字节流类型            Log.i(TAG, "getData: " + response.body().byteStream());            //字符流类型            Log.i(TAG, "getData: " + response.body().charStream());         }      });   }

/**    * 带有多个参数的get请求    * @param url    * @param map    */   public void getParams(String url,Map<String,String> map){      String url1=url;

if(map!=null&&map.size()>0){         for(String key:map.keySet()){            url1+="&"+key+"="+map.get(key);         }      }      getData(url1);   }

/**    * 提交单个键值对    * @param url    * @param key    * @param value    */   public void postKeyValuePaire(String url,String key,String value){      FormBody formBody=new FormBody.Builder()            .add(key,value)            .build();      Request request=new Request.Builder()            .url(url)            .post(formBody)            .build();      client.newCall(request).enqueue(new Callback() {         @Override         public void onFailure(Call call, IOException e) {

}

@Override         public void onResponse(Call call, Response response) throws IOException {

}      });   }

/**    * 提交多个键值对    *    * @param url 提交的路径    * @param map 用来放置键值对,map的key对应键,value对应值    */

public void postMap(String url,Map<String ,String> map){      FormBody.Builder formBody=new FormBody.Builder();      if(map!=null){         for(String key:map.keySet()){            formBody.add(key,map.get(key));         }      }      Request request=new Request.Builder().url(url)            .post(formBody.build())            .build();      client.newCall(request).enqueue(new Callback() {         @Override         public void onFailure(Call call, IOException e) {

}

@Override         public void onResponse(Call call, Response response) throws IOException {

}      });   }

/**    * post提交Json数据    * @param url    * @param content    */   public void postString(String url,String content){

MediaType mediaType=MediaType.parse("application/json;  charset=utf-8");      RequestBody requestBody=RequestBody.create(mediaType,content);      Request request=new Request.Builder()            .url(url)            .post(requestBody)            .build();      client.newCall(request)            .enqueue(new Callback() {               @Override               public void onFailure(Call call, IOException e) {

}

@Override               public void onResponse(Call call, Response response) throws IOException {

}            });   }

/**    * 上传单一文件    */   public void uploadFile(String url, File file){      MediaType type=MediaType.parse(getMediaType(file.getName()));//设置上传文件的类型      RequestBody requestBody=RequestBody.create(type,file);//创建请求体

Request request=new Request.Builder().url(url)//创建请求            .post(requestBody)            .build();

client.newCall(request).enqueue(new Callback() {         @Override         public void onFailure(Call call, IOException e) {

}

@Override         public void onResponse(Call call, Response response) throws IOException {

}      });   }

/**    * 上传多个文件    */

public void uploadFiles(String url,File[] files){      MultipartBody.Builder builder=new MultipartBody.Builder().setType(MultipartBody.FORM);      for(int i=0;i<files.length;i++){         RequestBody fileBody=RequestBody.create(MediaType.parse(getMediaType(files[i].getName())),files[i]);         builder.addFormDataPart("file",files[i].getName(),fileBody);      }      Request request=new Request.Builder()            .url(url)            .post(builder.build())            .build();      client.newCall(request).enqueue(new Callback() {         @Override         public void onFailure(Call call, IOException e) {

}

@Override         public void onResponse(Call call, Response response) throws IOException {

}      });   }

/**    * 上传多个文件和参数    */   public void uplaodMultiFiles(String url,File[] files,Map<String ,String> map){      MultipartBody.Builder builder=new MultipartBody.Builder().setType(MultipartBody.FORM);      //添加文件      if(files!=null&&files.length>0){         for(int i=0;i<files.length;i++){            builder.addFormDataPart("uploadfile",files[i].getName(),RequestBody.create(MediaType.parse(files[i].getName()),files[i]));         }      }      //添加参数      if(map!=null&&map.size()>0){         for(String key:map.keySet()){            builder.addFormDataPart(key,map.get(key));         }      }

Request request=new Request.Builder().url(url)            .post(builder.build())            .build();      client.newCall(request).enqueue(new Callback() {         @Override         public void onFailure(Call call, IOException e) {

}

@Override         public void onResponse(Call call, Response response) throws IOException {

}      });

}

/**    * 根据文件的名称判断文件的MediaType    * @param fileName    * @return    */   private String getMediaType(String fileName){      FileNameMap map= URLConnection.getFileNameMap();      String contentTypeFor=map.getContentTypeFor(fileName);      if(contentTypeFor==null){         contentTypeFor="applicationn/octet-stream";      }      return contentTypeFor;   }

/**    * 设置请求头    * @param headersParams    * @return    */   private Headers SetHeaders(Map<String, String> headersParams){      Headers headers=null;      okhttp3.Headers.Builder headersbuilder=new okhttp3.Headers.Builder();

if(headersParams != null)      {         Iterator<String> iterator = headersParams.keySet().iterator();         String key = "";         while (iterator.hasNext()) {            key = iterator.next().toString();            headersbuilder.add(key, headersParams.get(key));            Log.d("get http", "get_headers==="+key+"===="+headersParams.get(key));         }      }      headers=headersbuilder.build();

return headers;   }

/**    * get方法连接拼加参数    * @param mapParams    * @return    */   private String setUrlParams( Map<String, String> mapParams){      String strParams = "";      if(mapParams != null){         Iterator<String> iterator = mapParams.keySet().iterator();         String key = "";         while (iterator.hasNext()) {            key = iterator.next().toString();            strParams += "&"+ key + "=" + mapParams.get(key);         }      }

return strParams;   }}
时间: 2024-12-11 07:57:41

OkHttp3的简单使用(二)的相关文章

ZabbixAPI+django+nginx简单的二次开发实例(三)

接上一篇博文 ZabbixAPI+django+nginx简单的二次开发实例(二) 步骤三,站点架构部分 本部分用到的软件 1,Nginx:接受访问请求,应答静态页面,转发动态请求至uwsgi 2,uwsgi:应答动态请求 3,Django:处理后台数据 4,supervisor:管理进程 首先安装Nginx yum install epel-release yum install python-devel nginx 修改配置文件 vim /etc/ngnix/ngnix.conf user

调用MyFocus库,简单实现二十几种轮播效果

一.首先点击这里下载myFocus库文件,标准文件库就行了,很小仅仅1.4M. myFocus库有以下的好处: a . 文件小巧却高效强大,能够实现二十几种轮播的效果. b . 极其简单的使用,只需要调用就可以使用,下面会介绍方法. c . 灵活的设置,很多参数可以提供设置,比如不想要文字提示,设置高度为0....更多参数适用请见网站教程页面. 二.下载下来之后,解压,看到一个文件夹,如下图所示: 对此文件夹进行一下说明:a . 打开js文件夹,然后有个js文件,就是我们最开始要调用的myfoc

若干排序算法简单汇总(二)

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/36706131 作者:小马 一希尔排序 上一篇讲到的直接插入排序,时间复杂度O(n^2). 请在脑海里想一下它的过程.如果一个序列本来就是有序的,对它排序的时间复杂度是O(n).所以当序列基本有序时,插入排序排序的效率大大提高,因为减少了移动的动作. 另外,直接插入排序还有一个特点,当n比较小时,它的效率比较高. 希尔排序正是基于上面两个思想做的一种改进算法.它先将整个序列分成若干

ZabbixAPI+django+nginx简单的二次开发实例(五)

接上一篇博文 ZabbixAPI+django+nginx简单的二次开发实例(四) 步骤五,图形展示 写一个RRDtool图形展示的脚本,由于要和view.py联动,我放在了appname的文件夹下 cd /API/web/pos/moniter vim rrddraw.py #!/usr/bin/env python #coding=utf-8 import rrdtool #ping的图形 def itemping(data): pngname = str(data['pname']) #图

Redis入门很简单之二【常见操作命令】

Redis入门很简单之二[常见操作命令] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存 Redis提供了丰富的命令,允许我们连接客户端对其进行直接操作.这里简单介绍一下作为常用的一些命令,包括对字符串.列表.集合.有序集合.哈希表的操作,以及一些其他常用命令. [ 基本操作] 1. 添加记录:通常用于设置字符串(string)类型,或者整数类型:如果key已经存在,则覆盖其对应的值. Shell代码   set name James 2. 获取记录:通过键获取值.

Android自定义用户控件简单范例(二)

对于完全由后台定制的控件,并不是很方便其他人的使用,因为我们常常需要看到控件放到xml界面上的效果,并根据效果进行布局的调整,这就需要一个更加标准的控件制作流程: 我们的自定义控件和其他的控件一样,应该写成一个类,而这个类的属性是是有自己来决定的. 我们要在res/values目录下建立一个attrs.xml的文件,并在此文件中增加对控件的属性的定义. 使用AttributeSet来完成控件类的构造函数,并在构造函数中将自定义控件类中变量与attrs.xml中的属性连接起来. 在自定义控件类中使

正则表达式--简单记忆二

全部符号解释 字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个 向后引用.或一个八进制转义符.例如,'n' 匹配字符 "n".'\n' 匹配一个换行符.序列 '\\' 匹配 "\" 而 "\(" 则匹配 "(". ^ 匹配输入字符串的开始位置.如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置. $ 匹配输入字符串的结束位置.如果设置了RegExp

【sql注入】简单实现二次注入

[sql注入]简单实现二次注入 本文转自:i春秋社区 测试代码1:内容详情页面 [PHP] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <?php     include('./connect.php'); //引入数据库配置文件     $id=$_GET['id'];     $select_sql="SELECT * FROM article WHERE title='

把简单的二维数组变成一维数组

在工作中我们经常需要把二维数组变成一维数组.那么就需要循环拿出来,其实有时候我们可以使用一些小技巧,借助php的内置函数来实现,但是我说的只是简单的二维数数组$arr= array('name'=>array('a'=>'abc','b'=>'bcd','c'=>'cde'));如果我们使用array_pop(),就可以拿到一维数组了,array_pop()本来是删除并返回数组的最后一个元素. 所以我们就可以将上诉的$arr变成array('a'=>'abc','b'=>