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, 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的简单使用(二)的更多相关文章
- iOS开发UI篇—Quartz2D简单使用(二)
iOS开发UI篇—Quartz2D简单使用(二) 一.画文字 代码: // // YYtextview.m // 04-写文字 // // Created by 孔医己 on 14-6-10. // ...
- 使用C语言实现二维,三维绘图算法(3)-简单的二维分形
使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- 【sql注入】简单实现二次注入
[sql注入]简单实现二次注入 本文转自:i春秋社区 测试代码1:内容详情页面 [PHP] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 1 ...
- VC6下OpenGL 开发环境的构建外加一个简单的二维网络棋盘绘制示例
一.安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows 环境下的GLUT 本地下载地址:glut-install.zip(大小约为 ...
- Java秒杀简单设计二:数据库表和Dao层设计
Java秒杀简单设计二:数据库表Dao层设计 上一篇中搭建springboot项目环境和设计数据库表 https://www.cnblogs.com/taiguyiba/p/9791431.html ...
- 爬虫简单之二---使用进程爬取起点中文网的六万多也页小说的名字,作者,等一些基本信息,并存入csv中
爬虫简单之二---使用进程爬取起点中文网的六万多也页小说的名字,作者,等一些基本信息,并存入csv中 准备使用的环境和库Python3.6 + requests + bs4 + csv + multi ...
- SignalR的简单使用(二)
原文:SignalR的简单使用(二) 之前提到SignalR代理在网页,通过生成的Js来完成相关的功能.但我不禁想一个问题, 难到SignalR的服务端就能寄存在web端吗,通过访问网页能方式才能启动 ...
- Redis入门很简单之二【常见操作命令】
Redis入门很简单之二[常见操作命令] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存 Redis提供了丰富的命令,允许我们连接客户端对其进行直接操作.这里简单介绍一 ...
- 猫狗大战("简单的二维背包")
题面:https://www.luogu.com.cn/problem/P1489 看上去是一道简单的二维费用背包,但是要特别小心循环顺序. Ⅰ先循环物品,再循环限制条件. Ⅱ每一个限制条件都必须从后 ...
随机推荐
- 搭建Dynamic Web Project(动态web项目)的springmvc工程1
本文转载自:http://blog.csdn.net/typa01_kk/article/details/45902955 此篇创建Dynamic Web Projec工程(动态web项目),下一篇, ...
- Oracle存储过程使用总结
1.使用Oracle存储过程查询结果集: 网上写的都是他妈的扯淡!其实一句话就行了,你只要返回一个游标就OK了.具体代码如下: CREATE OR REPLACE PROCEDURE PR_ORDER ...
- Linux Restricted Shell Bypass
Author: @n4ckhcker & @h4d3sw0rm Introduction Hello, so first of all let’s explain what is a rest ...
- EasyUI应用总结
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncod ...
- Win7 IE11 F2无法切换版本
Win7 IE11 F2无法切换版本 http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=45154 选择操作系统对应的版本 ht ...
- C++深度解析教程学习笔记(5)面向对象
1. 面向对象基本概念 (1)面向对象的意义在于 ①将日常生活中习惯的思维方式引入程序设计中 ②将需求中的概念直观的映射到解决方案中 ③以模块为中心构建可复用的软件系统 ④提高软件产品的可维护性和可扩 ...
- android 除法运算保留小数点
java保留两位小数问题: 方式一: 四舍五入 double f = 111231.5585; BigDecimal b = new BigDecimal(f); double f1 = b.setS ...
- Java字节码
Java字节码 javap -c 反编译.class文件可得字节码 知乎讨论https://www.zhihu.com/question/27831730 栈和局部变量操作 将常量压入栈的指令 aco ...
- mysql中的自定义函数
创建不带参数的自定义函数: 使用: 创建带参数的自定义函数: 使用: 创建具有复合结构的函数体的自定义函数:
- python闭包和装饰器的理解
闭包: 两个函数的嵌套,外部函数返回内部函数的引⽤,外部函数⼀定有参数 def 外部函数(参数): def 内部函数(): pass return 内部函数 他跟函数之间的区别: 1.格式两个函数嵌套 ...