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. ExcelHandle

    using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using Syste ...

  2. Intellij idea run dashboard面板

    IDEA下 Spring Boot显示 Run Dashboard面板 Run Dashboard面板允许您一次浏览和管理多个运行项目,左侧是运行配置表及其状态,右侧是详细信息和特定于应用程序的信息, ...

  3. 数据分析与处理之二(Leveldb 实现原理)

    郑重声明:本篇博客是自己学习 Leveldb 实现原理时参考了郎格科技系列博客整理的,原文地址:http://www.samecity.com/blog/Index.asp?SortID=12,只是为 ...

  4. NOIP2005普及组第3题 采药 (背包问题)

    NOIP2005普及组第3题 采药 时间限制: 1 Sec  内存限制: 128 MB提交: 50  解决: 23[提交][状态][讨论版][命题人:外部导入] 题目描述 辰辰是个天资聪颖的孩子,他的 ...

  5. sublime text3 自动编译php 适合用于简单的php文件执行

    1.将php路径放入环境变量中 2. 点击 sublime_text的“工具”->"编译系统"->"编译新系统" { "cmd" ...

  6. C# winform程序免安装.net framework在XP/win7/win10环境运行!(转)

    C# winform程序免安装.net framework在XP/win7/win10环境运行!   前文: 首先感谢群里的大神宇内流云 提供的anyexec for windows版本. 经过本人搭 ...

  7. C++学习路线(转载)

    随着互联网及互联网+深入蓬勃的发展,经过40余年的时间洗礼,C/C++俨然已成为一门贵族语言,出色的性能使之成为高级语言中的性能王者.而在今天,它又扮演着什么样重要的角色呢?请往下看: 后端服务器,移 ...

  8. JAXB 专题二(BSP接口实战)

    BSP下单接口 1.xml格式如下 <?xml version="1.0" encoding="utf-8"?> <Request servi ...

  9. RAD 10 蓝牙

    http://docwiki.embarcadero.com/Libraries/Seattle/en/System.Bluetooth.TBluetoothLEManager.StartDiscov ...

  10. 记录MongoDB常用查询

    {$and:[{"}}]} // flag不等于1 也不等于0 {$or:[{"flag" :{ $ne:"1"}},{"flag" ...