OKHttpUtils使用介绍

原创 2017年04月29日 17:55:25

一,概述

在上一篇blog的末尾讲到了OKHttp使用时的缺点,和对OKHttp封装的必要性。在github上有很多对OKHttp封装的优秀框架,其首推的就是hongyang大神的OKHttpUtils。关于hongyang大神的OKHttpUtils使用以及源码分析在后面章节再做讲解。这篇blog主要讲解鄙人自己封装的OKHttpUtils的使用方法。源码比较简单,感兴趣的朋友可以自行查看。

github的地址是:https://github.com/guozhengXia/OkHttpUtils

鄙人封装的OKHttpUtils非常简单,只有三个java文件,其中OKHttpUtil.java提供了所有方法的入口,故看这个文件有哪些方法就可以知道OKHttpUtils功能有哪些。

封装的功能有:
* 一般的get请求
* 一般的post请求
* 上传单个文件(包含进度)
* 上传list集合文件
* 上传map集合文件
* 文件下载(包含进度)
* 图片下载(实现了图片的压缩)

个人觉得这个是最便于使用的OKHttpUtils框架,虽然代码简单,但实现了参数封装和回调方法执行在UI线程的功能。这是我项目中使用的网络请求工具类,完全可以说拿来即用。

下面对各种请求进行详细讲解。

二,get请求的使用方法

关于get请求提供了三个方法,方法声明如下:

//1,不传递参数的get请求。
okHttpGet(String url, CallBackUtil callBack)
//2,传递参数的get请求。
okHttpGet(String url, Map<String, String> paramsMap, CallBackUtil callBack)
//3,传递参数,且传递请求头的get请求。
okHttpGet(String url, Map<String, String> paramsMap, Map<String, String> headerMap, CallBackUtil callBack)

下面以传递参数的get请求为例说明使用方法:

        String url = "https://www.baidu.com/";
        HashMap<String,String> paramsMap = new HashMap<>();
        paramsMap.put("userName","zhangsan");
        paramsMap.put("password","000000");
        OkhttpUtil.okHttpGet(url, paramsMap,new CallBackUtil.CallBackString() {
            @Override
            public void onFailure(Call call, Exception e) {}//请求失败时调用,执行在UI线程

            @Override
            public void onResponse(String response) {//请求成功时调用,执行在UI线程
                Toast.makeText(MainActivity.this,"Success",Toast.LENGTH_SHORT).show();
            }
        });

注:onFailure方法请求失败时执行,onResponse方法请求成功时执行。这两个方法都执行在UI线程。

个人觉得这种封装方法使用起来特别方便。虽然是三个方法,但三个方法是重载的关系,当作一个方法使用即可。

二,post请求的使用方法

关于post请求提供了五个方法,post请求支持上传键值对参数,也支持上传json格式的参数。方法声明如下:

//1,不传递参数的post请求。
okHttpPost(String url, CallBackUtil callBack)
//2,传递键值对参数的post请求。
okHttpPost(String url, Map<String, String> paramsMap, CallBackUtil callBack) 
//3,传递键值对参数,且传递请求头的get请求。
okHttpPost(String url, Map<String, String> paramsMap, Map<String, String> headerMap, CallBackUtil callBack) 
//4,传递json格式参数的post请求。
okHttpPostJson(String url, String jsonStr, CallBackUtil callBack)
//5传递json格式参数,且传递请求头的get请求。
okHttpPostJson(String url, String jsonStr, Map<String, String> headerMap, CallBackUtil callBack)

下面以传递json格式参数的post请求为例说明使用方法:

Student student = new Student();
student.userName = "zhangsan";
student.password = "000000";
String jsonStr = new Gson.toJson(student);
String url = "https://www.baidu.com/";

OkhttpUtil.okHttpPostJson(url, jsonStr, new CallBackUtil.CallBackString() {
    @Override
    public void onFailure(Call call, Exception e) {

    }

    @Override
    public void onResponse(String response) {//请求成功时调用,执行在UI线程

    }
});

有没有发现post请求也特别好用。

三,上传文件

上传文件提供了九个方法。之所以声明了九个方法,是因为完全覆盖了两个维度。
第一个维度的三种情况是:1,不带参数,2,带键值对参数,3,既带键值对参数又带请求头。
第二个维度的三种情况是:1,上传单个文件,2,上传list集合文件,3,上传map集合文件。
虽然方法有九个,但都是重载的关系,想传什么参数,就传什么参数,底层会自动区分。
方法的声明如下(按照第二个维度只列出三个方法):

//1,上传单个文件。
okHttpUploadFile(String url, File file,String fileKey, String fileType, CallBackUtil callBack)
//2,上传list集合文件。
okHttpUploadListFile(String url, List<File> fileList, String fileKey, String fileType, CallBackUtil callBack)
//3,上传map集合文件。
okHttpUploadMapFile(String url, Map<String, File> fileMap, String fileType, CallBackUtil callBack)

下面对参数进行说明:
file:文件对象。
fileKey:文件的key。在上传文件到服务器时一般以键值对的形式上传参数,键就是:filekey,值是:file。
fileType:文件类型。这个是OKHttpUtils类中的常量,如果是图片类型就传:”image/*”。
fileList:里面元素时File对象的list集合。在上传文件到服务器时,有时需要多张图片,此时使用这种方式,比如在微信中发表九张图片的朋友圈时。
fileMap:里面键是filekey,值是file的map集合。在上传文件到服务器时,有时每张图片都对应一个键,此时可以使用这个方法。

下面以上传list集合文件为例说明使用方法:

        ArrayList<File> fileList = new ArrayList<>();
        fileList.add(new File("path01"));
        fileList.add(new File("path02"));
        String url = "https://www.baidu.com/";

        OkhttpUtil.okHttpUploadListFile(url, fileList, "files", OkhttpUtil.FILE_TYPE_FILE, new CallBackUtil.CallBackString() {
            @Override
            public void onFailure(Call call, Exception e) {

            }

            @Override
            public void onResponse(String response) {

            }
        });

上传文件是不是也特别方便。

四,下载文件

下载文件提供了两个方法,两种方法都可以获取下载进度,声明如下:

//1,不需要传递参数的文件下载
okHttpDownloadFile(String url,CallBackUtil.CallBackFile callBack)
//2,可以传递键值对参数的文件下载
okHttpDownloadFile(String url,Map<String, String> paramsMap,  CallBackUtil.CallBackFile callBack)

使用示例如下:

String url = "https://www.baidu.com/";
        OkhttpUtil.okHttpDownloadFile(url, new CallBackUtil.CallBackFile("dir","fileName") {
            @Override
            public void onFailure(Call call, Exception e) {

            }

            @Override
            public void onProgress(float progress, long total) {//文件下载进度,执行在UI线程
                super.onProgress(progress, total);
            }

            @Override
            public void onResponse(File response) {//请求成功时调用,执行在UI线程

            }
        });

注意:此时的回调接口是CallBackFile类型的,且在创建CallBackFile对象时需要传递两个参数:文件保存的目录和文件名。

五,加载bitmap对象

加载bitmap对象提供了两个方法,如下:

//1,不需要传递参数的加载bitmap对象。
okHttpGetBitmap(String url, CallBackUtil.CallBackBitmap callBack)
//2,可以传递键值对参数的文件下载
okHttpGetBitmap(String url,Map<String, String> paramsMap,  CallBackUtil.CallBackBitmap callBack)

使用示例如下:

String url = "https://www.baidu.com/";
OkhttpUtil.okHttpGetBitmap(url, new CallBackUtil.CallBackBitmap(200,200) {
     @Override
     public void onFailure(Call call, Exception e) {

     }

     @Override
     public void onResponse(Bitmap response) {//请求成功时调用,执行在UI线程

     }
 });

注意:此时需要注意的也是回调接口,这个回调接口是CallBackBitmap类型的,这个类有三个构造方法,用于压缩图片,防止oom的发生。
CallBackBitmap的三个构造方法分别是:

//1,无参构造,没有压缩机制,注意OOM的发生
CallBackBitmap()
//2,传递ImageView 对象,此时是根据ImageView 控件的高和宽来压缩图片。如果此时imageview.getWidth()方法或imageView.getHeight()方法返回值为0则会报异常。
CallBackBitmap(ImageView imageView)
//3,根据传递的宽和高来压缩图片,这种方式肯定不会出现异常,但必须要知道需要显示的宽高。
CallBackBitmap(int targetWidth,int targetHeight)

六,回调接口CallBackUtil的扩展使用

在该框架中请求网络的返回值类型是由CallBackUtil接口决定的,CallBackUtil接口解析成什么数据类型,就返回什么数据类型。

在框架中提供了CallBackUtil的三个子类,分别对数据进行了不同的解析。
1,CallBackString类的onResponse方法中返回值是String类型。
2,CallBackBitmap类的onResponse方法中返回值是Bitmap类型。
3,CallBackFile类的onResponse方法中返回值是File类型。

此时使用的是面向接口编程的思想。支持CallBackUtil的扩展使用。

在很多时候我们需要返回一个javaBean对象,下面就实现返回javaBean对象的功能。

使用示例如下:

String url = "https://www.baidu.com/";

OkhttpUtil.okHttpGet(url, new CallBackUtil<Student>() {
     @Override
     public Student onParseResponse(Call call, Response response) {//解析响应,执行在子线程
         try {
             String result = response.body().string();
             Student student = new Gson.fromJson(result, Student.class);
             return student;
         } catch (Exception e) {
             e.printStackTrace();
         }
         return null;
     }

     @Override
     public void onFailure(Call call, Exception e) {

     }

     @Override
     public void onResponse(Student response) {//返回Student对象,执行在UI线程

     }
 });

注意:onParseResponse方法是解析Response的核心代码,这个方法执行在子线程。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fightingXia/article/details/70980751

基于鸿洋okhttp封装工具类okhttputils 返回数据回调封装

简介okhttputils 是csdn 鸿洋大神基于okhttp网络请求进行的二次封装基本请求格式如下OkHttpUtils .get() .url(url) .addParams("username...
  • jiushiwo12340
  • jiushiwo12340
  • 2017-05-27 13:53:17
  • 7235

Android 一个改善的okHttp封装库

转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49734867; 本文出自:【张鸿洋的博客】 一、概述之前写了篇An...
  • lmj623565791
  • lmj623565791
  • 2015-12-15 14:36:37
  • 204496

okHttpUtils(hongyang)的配置及使用(网络框架)

okHttpUtils(hongyang)的配置及使用(网络框架)
  • lixiang_Y
  • lixiang_Y
  • 2017-04-13 19:19:17
  • 6961

Okhttputils终极封装

前言:项目源码https://github.com/yulyu2008/XiayuOkHttpOkhttputils是张鸿洋基于okhhttp封装的一个框架,使用起来很方便,相信很多人都用到过,这里我...
  • yulyu
  • yulyu
  • 2017-02-13 15:01:36
  • 8338

深入了解OKHttp(二:使用第三方封装库okhttp-utils)

1_下载并且运行案例okhttp-utils2_把okhttp-utils集成到案例中添加jar 或者compile project(':okhttputils')3_使用okhttp-utils请求...
  • JLhaoran
  • JLhaoran
  • 2018-04-07 12:32:58
  • 67

OkHttpUtils一个专注于让网络请求更简单的框架

1.支持的常用功能 一般的 get,post,put,delete,head,options请求基于Post的大文本数据上传,postString(),postJson()等多文件和多参数统一的...
  • hehe307
  • hehe307
  • 2016-06-22 13:44:14
  • 10694

Okhttp与Okhttputils的用法及区别

网络框架Okhttp和OkhttpUtils的常用方法步骤及特点
  • infiniteUp
  • infiniteUp
  • 2016-10-26 16:15:02
  • 6267

OkHttp封装

public class OkHttpUtils { private MyHandler myHandler=new MyHandler(); private String mobile; priva...
  • wanglinuo521
  • wanglinuo521
  • 2018-04-01 21:34:26
  • 13

OkHttpUtils

  • 2016年09月25日 23:39
  • 4.16MB
  • 下载

OkHttpUtils的使用

OkHttpUtils是一个非常好的网络协议框架,它是在OkHttp的基础上进行了二次封装。要使用这个类首先下载jar包,如下: http://download.csdn.net/download/x...
  • xxdw1992
  • xxdw1992
  • 2017-12-12 10:39:59
  • 216
收藏助手
不良信息举报
您举报文章:OKHttpUtils使用介绍
举报原因:
原因补充:

(最多只允许输入30个字)