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, Callback callback){
MediaType type=MediaType.parse(getMediaType(file.getName()));//设置上传文件的类型
MultipartBody.Builder builder = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(),
RequestBody.create(type, file)); RequestBody requestBody = builder.build(); Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build(); client.newCall(request).enqueue(callback);
} /**
* 上传多个文件
* @param url
* @param files
*/
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 { }
});
} /**
* 上传多个文件和参数
* @param url url地址
* @param files 文件
* @param map 参数
*/
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 文件的MediaType
*/
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 headers
*/
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 拼接后的url
*/
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;
} }

  

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

  1. iOS开发UI篇—Quartz2D简单使用(二)

    iOS开发UI篇—Quartz2D简单使用(二) 一.画文字 代码: // // YYtextview.m // 04-写文字 // // Created by 孔医己 on 14-6-10. // ...

  2. 使用C语言实现二维,三维绘图算法(3)-简单的二维分形

    使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...

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

    [sql注入]简单实现二次注入 本文转自:i春秋社区 测试代码1:内容详情页面 [PHP] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 1 ...

  4. VC6下OpenGL 开发环境的构建外加一个简单的二维网络棋盘绘制示例

    一.安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows 环境下的GLUT 本地下载地址:glut-install.zip(大小约为 ...

  5. Java秒杀简单设计二:数据库表和Dao层设计

    Java秒杀简单设计二:数据库表Dao层设计 上一篇中搭建springboot项目环境和设计数据库表  https://www.cnblogs.com/taiguyiba/p/9791431.html ...

  6. 爬虫简单之二---使用进程爬取起点中文网的六万多也页小说的名字,作者,等一些基本信息,并存入csv中

    爬虫简单之二---使用进程爬取起点中文网的六万多也页小说的名字,作者,等一些基本信息,并存入csv中 准备使用的环境和库Python3.6 + requests + bs4 + csv + multi ...

  7. SignalR的简单使用(二)

    原文:SignalR的简单使用(二) 之前提到SignalR代理在网页,通过生成的Js来完成相关的功能.但我不禁想一个问题, 难到SignalR的服务端就能寄存在web端吗,通过访问网页能方式才能启动 ...

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

    Redis入门很简单之二[常见操作命令] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存  Redis提供了丰富的命令,允许我们连接客户端对其进行直接操作.这里简单介绍一 ...

  9. 猫狗大战("简单的二维背包")

    题面:https://www.luogu.com.cn/problem/P1489 看上去是一道简单的二维费用背包,但是要特别小心循环顺序. Ⅰ先循环物品,再循环限制条件. Ⅱ每一个限制条件都必须从后 ...

随机推荐

  1. layui与layer同时引入冲突的问题

    之前在项目中只有用layer,但是后来有用到了layui,结果发现同时引入这两个东东 会出现冲突的问题 导致代码运行不正常 后来网上找到了解决办法: 学习源头:http://fly.layui.com ...

  2. FIR滤波器和IIR滤波器的区别

    数字滤波器广泛应用于硬件电路设计,在离散系统中尤为常见,一般可以分为FIR滤波器和IIR滤波器,那么他们有什么区别和联系呢. FIR滤波器 定义: FIR滤波器是有限长单位冲激响应滤波器,又称为非递归 ...

  3. yii console

    Here is a step by step to show how to run command in the server with yii framework. 1. Create the we ...

  4. pt工具之pt-archiver

    # tar -zxvf percona-toolkit-2.2.17.tar.gz# yum -y install perl perl-IO-Socket-SSL perl-DBD-MySQL per ...

  5. modelform实例学习

    先来回顾下form的用法 一对多关系,form显示的是下拉框 多对多关系,form显示的是多选框 modelform的用法 modelsform的写法 from django.forms import ...

  6. Oracle 错误: sp2 0734 unknown command beginning -- 解决方法

    今天在做一个Oracle的倒库操作,使用SQLPLUS倒库的时候发生SP2 0734的错误 !! 注:我是用的是Ocale11g自带的SQLPLUS 由于之前在工具(SQL Developer)里面运 ...

  7. GitHub in vs2010、vs2013

    GitHub在使用上大致和其他源代码管理工具一样,个人源代码管理和分享一大利器,而且vs2010和vs2013配置也没有任何区别,简单做了一下图文配置说明 一.注册github 1.github.co ...

  8. dd命令的解释

    dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. if=文件名:输入 ...

  9. List去重与排序

    最简单的方法:利用Where一句话去重 pointLst = pointLst.Where((x, i) => pointLst.FindIndex(z => z.POINT_ID == ...

  10. Python基础学习五 内置模块

    time 模块 1 >>> import time 2 >>> time.time() 3 1491064723.808669 4 >>> # t ...