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. Use the dkms from EPEL when install CUDA Toolkits on CentOS

    ###Use the dkms from EPEL. yum install epel-release yum install dkms # download the rpm from the NVi ...

  2. find 使用指南

    find 使用方法整理 -name  按照文件名查找文件. -perm  按照文件权限来查找文件. -user  按照文件属主来查找文件. -group  按照文件所属的组来查找文件. - n表示文件 ...

  3. 大数据竞赛平台——Kaggle 入门篇

    这篇文章适合那些刚接触Kaggle.想尽快熟悉Kaggle并且独立完成一个竞赛项目的网友,对于已经在Kaggle上参赛过的网友来说,大可不必耗费时间阅读本文.本文分为两部分介绍Kaggle,第一部分简 ...

  4. 低成本FPGA中实现动态相位调整

    在FPGA中,动态相位调整(DPA)主要是实现LVDS接口接收时对时钟和数据通道的相位补偿,以达到正确接收的目的.ALTERA的高端FPGA,如STRATIX(r) 系列中自带有DPA电路,但低端的F ...

  5. Socket代码

    服务器端 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...

  6. pytest命令行选项

    -m 标记 代码加一个装饰器:@pytest.mark.run_bbc_test,命令行添加 -m run_bbc_test,执行带@pytest.mark.run_bbc_test的测试用例: -k ...

  7. PHP通过引用传递参数

    <?php function add_some_extra(&$string) // 引入变量,使用同一个存储地址 { $string .= 'and something extra.' ...

  8. Oracle linux 6.3 安装11g R2 RAC on vbox

    1 安装系统 Virtual box 4.3 Oracle linux 6.3 Oracle 11g r2 Make sure "Adapter 1" is enabled, se ...

  9. STM32使用printf丢失第一个字母的问题

    STM32使用printf函数给串口打印信息的执行步骤为: 1.重定向printf函数 给uart.c文件中增加如下函数: //重定向c库函数printf到USART1 int fputc(int c ...

  10. mul 指令

    mul 是乘法指令 两个相乘的数:两个相乘的数,要么都是 8 位,要么都是 16 位. 如果是 8 位,一个默认放在 AL 中,另一个放在 8 位寄存器或内存字节单元中: 如果是 16 位,一个默认在 ...