对okhttp的封装类,okhttp见:https://github.com/square/okhttp.
目前对应okhttp版本3.3.1.

用法:

Android Studio

  1. compile 'com.zhy:okhttputils:2.6.2'

Eclipse

下载最新jar:okhttputils-2_6_2.jar
注:需要同时导入okhttp和okio的jar,下载见:https://github.com/square/okhttp.
目前对以下需求进行了封装

一般的get请求
一般的post请求
基于Http Post的文件上传(类似表单)
文件下载/加载图片
上传下载的进度回调
支持取消某个请求
支持自定义Callback
支持HEAD、DELETE、PATCH、PUT
支持session的保持
支持自签名网站https的访问,提供方法设置下证书就行
配置OkhttpClient

默认情况下,将直接使用okhttp默认的配置生成OkhttpClient,如果你有任何配置,记得在Application中调用initClient方法进行设置。

  1. public class MyApplication extends Application
  2. {
  3. @Override
  4. public void onCreate()
  5. {
  6. super.onCreate();
  7. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  8. // .addInterceptor(new LoggerInterceptor("TAG"))
  9. .connectTimeout(10000L, TimeUnit.MILLISECONDS)
  10. .readTimeout(10000L, TimeUnit.MILLISECONDS)
  11. //其他配置
  12. .build();
  13. OkHttpUtils.initClient(okHttpClient);
  14. }
  15. }

别忘了在AndroidManifest中设置。

对于Cookie(包含Session)

对于cookie一样,直接通过cookiejar方法配置,参考上面的配置过程。

  1. CookieJarImpl cookieJar = new CookieJarImpl(new PersistentCookieStore(getApplicationContext()));
  2. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  3. .cookieJar(cookieJar)
  4. //其他配置
  5. .build();
  6. OkHttpUtils.initClient(okHttpClient);

目前项目中包含:

PersistentCookieStore //持久化cookie
SerializableHttpCookie //持久化cookie
MemoryCookieStore //cookie信息存在内存中
如果遇到问题,欢迎反馈,当然也可以自己实现CookieJar接口,编写cookie管理相关代码。
此外,对于持久化cookie还可以使用https://github.com/franmontiel/PersistentCookieJar.
相当于框架中只是提供了几个实现类,你可以自行定制或者选择使用。

对于Log

初始化OkhttpClient时,通过设置拦截器实现,框架中提供了一个LoggerInterceptor,当然你可以自行实现一个Interceptor 。

  1. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  2. .addInterceptor(new LoggerInterceptor("TAG"))
  3. //其他配置
  4. .build();
  5. OkHttpUtils.initClient(okHttpClient);

对于Https

依然是通过配置即可,框架中提供了一个类HttpsUtils

设置可访问所有的https网站

  1. HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null);
  2. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  3. .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
  4. //其他配置
  5. .build();
  6. OkHttpUtils.initClient(okHttpClient);

设置具体的证书

  1. HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(证书的inputstream, null, null);
  2. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  3. .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager))
  4. //其他配置
  5. .build();
  6. OkHttpUtils.initClient(okHttpClient);

双向认证

  1. HttpsUtils.getSslSocketFactory(
  2. 证书的inputstream,
  3. 本地证书的inputstream,
  4. 本地证书的密码)

同样的,框架中只是提供了几个实现类,你可以自行实现SSLSocketFactory,传入sslSocketFactory即可。

其他用法示例

GET请求

  1. String url = "http://www.csdn.net/";
  2. OkHttpUtils
  3. .get()
  4. .url(url)
  5. .addParams("username", "hyman")
  6. .addParams("password", "123")
  7. .build()
  8. .execute(new StringCallback()
  9. {
  10. @Override
  11. public void onError(Request request, Exception e)
  12. {
  13. }
  14. @Override
  15. public void onResponse(String response)
  16. {
  17. }
  18. });

POST请求

  1. OkHttpUtils
  2. .post()
  3. .url(url)
  4. .addParams("username", "hyman")
  5. .addParams("password", "123")
  6. .build()
  7. .execute(callback);

1.Post JSON

  1. OkHttpUtils
  2. .postString()
  3. .url(url)
  4. .content(new Gson().toJson(new User("zhy", "123")))
  5. .mediaType(MediaType.parse("application/json; charset=utf-8"))
  6. .build()
  7. .execute(new MyStringCallback());

提交一个Gson字符串到服务器端,注意:传递JSON的时候,不要通过addHeader去设置contentType,而使用.mediaType(MediaType.parse("application/json; charset=utf-8")).。

2.Post File

  1. OkHttpUtils
  2. .postFile()
  3. .url(url)
  4. .file(file)
  5. .build()
  6. .execute(new MyStringCallback());

将文件作为请求体,发送到服务器。

3.Post表单形式上传文件

  1. OkHttpUtils.post()//
  2. .addFile("mFile", "messenger_01.png", file)//
  3. .addFile("mFile", "test1.txt", file2)//
  4. .url(url)
  5. .params(params)//
  6. .headers(headers)//
  7. .build()//
  8. .execute(new MyStringCallback());

支持单个多个文件,addFile的第一个参数为文件的key,即类别表单中的name属性。

自定义CallBack

目前内部包含StringCallBack,FileCallBack,BitmapCallback,可以根据自己的需求去自定义Callback,例如希望回调User对象:

  1. public abstract class UserCallback extends Callback
  2. {
  3. @Override
  4. public User parseNetworkResponse(Response response) throws IOException
  5. {
  6. String string = response.body().string();
  7. User user = new Gson().fromJson(string, User.class);
  8. return user;
  9. }
  10. }
  11. OkHttpUtils
  12. .get()//
  13. .url(url)//
  14. .addParams("username", "hyman")//
  15. .addParams("password", "123")//
  16. .build()//
  17. .execute(new UserCallback()
  18. {
  19. @Override
  20. public void onError(Request request, Exception e)
  21. {
  22. mTv.setText("onError:" + e.getMessage());
  23. }
  24. @Override
  25. public void onResponse(User response)
  26. {
  27. mTv.setText("onResponse:" + response.username);
  28. }
  29. });

通过parseNetworkResponse回调的response进行解析,该方法运行在子线程,所以可以进行任何耗时操作,详细参见sample。

下载文件

  1. OkHttpUtils//
  2. .get()//
  3. .url(url)//
  4. .build()//
  5. .execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(), "gson-2.2.1.jar")//
  6. {
  7. @Override
  8. public void inProgress(float progress)
  9. {
  10. mProgressBar.setProgress((int) (100 * progress));
  11. }
  12. @Override
  13. public void onError(Request request, Exception e)
  14. {
  15. Log.e(TAG, "onError :" + e.getMessage());
  16. }
  17. @Override
  18. public void onResponse(File file)
  19. {
  20. Log.e(TAG, "onResponse :" + file.getAbsolutePath());
  21. }
  22. });

注意下载文件可以使用FileCallback,需要传入文件需要保存的文件夹以及文件名。

显示图片

  1. OkHttpUtils
  2. .get()//
  3. .url(url)//
  4. .build()//
  5. .execute(new BitmapCallback()
  6. {
  7. @Override
  8. public void onError(Request request, Exception e)
  9. {
  10. mTv.setText("onError:" + e.getMessage());
  11. }
  12. @Override
  13. public void onResponse(Bitmap bitmap)
  14. {
  15. mImageView.setImageBitmap(bitmap);
  16. }
  17. });

显示图片,回调传入BitmapCallback即可。

上传下载的进度显示

  1. new Callback()
  2. {
  3. //...
  4. @Override
  5. public void inProgress(float progress)
  6. {
  7. //use progress: 0 ~ 1
  8. }
  9. }

callback回调中有inProgress方法,直接复写即可。

HEAD、DELETE、PUT、PATCH

  1. OkHttpUtils
  2. .put()//also can use delete() ,head() , patch()
  3. .requestBody(RequestBody.create(null, "may be something"))//
  4. .build()//
  5. .execute(new MyStringCallback());

如果需要requestBody,例如:PUT、PATCH,自行构造进行传入。

同步的请求

  1. Response response = OkHttpUtils
  2. .get()//
  3. .url(url)//
  4. .tag(this)//
  5. .build()//
  6. .execute();

execute方法不传入callback即为同步的请求,返回Response。

取消单个请求

  1. RequestCall call = OkHttpUtils.get().url(url).build();
  2. call.cancel();

根据tag取消请求

目前对于支持的方法都添加了最后一个参数Object tag,取消则通过OkHttpUtils.cancelTag(tag)执行。

例如:在Activity中,当Activity销毁取消请求:

  1. OkHttpUtils
  2. .get()//
  3. .url(url)//
  4. .tag(this)//
  5. .build()//
  6. @Override
  7. protected void onDestroy()
  8. {
  9. super.onDestroy();
  10. //可以取消同一个tag的
  11. OkHttpUtils.cancelTag(this);//取消以Activity.this作为tag的请求
  12. }

比如,当前Activity页面所有的请求以Activity对象作为tag,可以在onDestory里面统一取消。

混淆

  1. #okhttputils
  2. -dontwarn com.zhy.http.**
  3. -keep class com.zhy.http.**{*;}
  4. #okhttp
  5. -dontwarn okhttp3.**
  6. -keep class okhttp3.**{*;}
  7. #okio
  8. -dontwarn okio.**
  9. -keep class okio.**{*;}

OkHttpUtils的更多相关文章

  1. okhttp-utils的封装之okhttp的使用

    HTTP是现代应用的网络.这就是我们如何交换数据和媒体.让你的东西做HTTP有效负载的速度和节省带宽. okhttp是HTTP客户端的有效默认: HTTP 2支持允许所有请求相同的主机共享一个插座. ...

  2. okhttputils开源库的混淆配置(Eclipse)

    #=====================okhttputils框架===================== #====okhttputils==== -libraryjars libs/okht ...

  3. 毕加索的艺术——Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选

    毕加索的艺术--Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选 官网: http://square.github.i ...

  4. OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据

    OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...

  5. okhttputils【 Android 一个改善的okHttp封装库】使用(一)

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本文使用的OKHttp封装库是张鸿洋(鸿神)写的,因为在项目中一直使用这个库,所以对于一些常用的请求方式都验证过,所以特此整理下. ...

  6. okhttputils【 Android 一个改善的okHttp封装库】使用(二)

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 上一篇讲了如何在项目中导入OKHttputils库的操作,这一篇主要讲常见请求的写法. get请求 public String getPe ...

  7. okhttputils【 Android 一个改善的okHttp封装库】使用(三)

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这一篇主要讲一下将OkHttpUtils运用到mvp模式中. 数据请求地址:http://www.wanandroid.com/to ...

  8. OkHttpUtils简单的网络去解析使用

    先添加依赖: implementation 'com.google.code.gson:gson:2.2.4' implementation 'com.zhy:okhttputils:2.0.0' 网 ...

  9. 超简单的okHttpUtils封装(下)

      版权声明:转载请注明出处:http://blog.csdn.net/piaomiao8179 https://blog.csdn.net/piaomiao8179/article/details/ ...

随机推荐

  1. C#基础--面向过程计算器

    //面向过程计算器 //思路: 需要注意的是: 两个数相除 除数不能为0: //1.提示用户输入 //2.进行运算 //3.得到结果 Console.WriteLine("请输入第一个数字: ...

  2. 华为V-ISA信誉安全体系:对付新型DDoS攻击的利器

        华为Anti-DDoS解决方案基于华为颇具传统优势的专业软硬件平台开发,在防护机制中,引入先进的检测机制,提供了业内首创的“V-ISA”信誉安全体系,是业界唯一单机可提供超百G DDoS防御能 ...

  3. 2016-1-9 Quartz框架的学习,写字板demo

    一:自定义view .h文件中代码如下 #import <UIKit/UIKit.h> @interface ZLpaintView : UIView @property(nonatomi ...

  4. 多数求和(java)

    实验题目:从命令行接受多个数字,求和之后输出结果. 设计思想:命令行输入的字符会赋值给args数组,所以在命令行输入数字后,直接取出args的数组长度,作为循环语句的终点判断,然后利用循环将字符型改为 ...

  5. yii2 单页面增删改

    视图层 <style>#tab tr td{    height:40px;    width:100px;}</style><form action="ind ...

  6. SQL调用系统存储过程整理

    SQL系统存储过程用法整理: xp_cmdshell --*执行DOS各种命令,结果以文本行返回. xp_fixeddrives --*查询各磁盘/分区可用空间 xp_loginconfig --*报 ...

  7. Linux下拷贝目录和删除

    cp命令用于复制文件或目录,若同事指定两个以上的文件或目录,切最后一个目的地是一个已存在的目录,则它会把前面指定的所有文件或目录复制到此目录中.若同时指定多个文件或目录,而最后的目的地并非一个已存在的 ...

  8. C++学习笔记3:一些错误

    错误1:执行程序后,控制台闪烁后退出 处理办法: (1)添加头文件:#include <iostream> (2)在程序返回前添加代码: std::cin.clear();//清除错误标志 ...

  9. 《JS高程》事件类型学习笔记

    事件类型: UI事件&焦点事件: 鼠标滚轮事件: 键盘与文本事件: 复合事件&变动事件: HTML5事件: 设备事件&触摸与手势事件:

  10. mark资料-selenium断言的分类

    操作(action).辅助(accessors)和断言(assertion): 操作action: 模拟用户与 Web 应用程序的交互. 辅助accessors: 这是辅助工具.用于检查应用程序的状态 ...