OkHttp封装之后使用

原创 2017年08月31日 18:30:48

代码都封装好了,上层Activity如何调用呢?

1.依赖

如果是android studio开发支持在线依赖(我已经把项目添加到jcenter上):

compile 'com.ansen.http:okhttpencapsulation:1.0.1'

如果是eclipse那你先把ide切换到android studio吧。。。不闲麻烦的话也可以把源码module的源码copy出来,反正也就几个类。

2.初始化HTTPCaller类

初始化的工作可以放Application,新建MyApplication类继承Application。初始化的时候通过HttpConfig设置一些参数,也可以添加公共参数。

public class MyApplication extends Application{
    @Override
    public void onCreate() {
        super.onCreate();

        HttpConfig httpConfig=new HttpConfig();
        httpConfig.setAgent(true);//有代理的情况能不能访问
        httpConfig.setDebug(true);//是否debug模式 如果是debug模式打印log
        httpConfig.setTagName("ansen");//打印log的tagname

        //可以添加一些公共字段 每个接口都会带上
        httpConfig.addCommonField("pf","android");
        httpConfig.addCommonField("version_code","1");

        //初始化HTTPCaller类
        HTTPCaller.getInstance().setHttpConfig(httpConfig);
    }
}

因为自定义Application,需要给AndroidManifest.xml文件application标签中的android:name属性赋值,指定自己重写的MyApplication。

发送get请求

发送get请求就一行代码。

HTTPCaller.getInstance().get(User.class, "http://139.196.35.30:8080/OkHttpTest/getUserInfo.do?per=123", null, requestDataCallback);

请求回调

http请求回调接口,无论成功或者失败都会回调。因为是测试所以都用在这个接口来回调,在真实的企业开发中,不同的请求用不同的回调。

private RequestDataCallback requestDataCallback = new RequestDataCallback<User>() {
        @Override
        public void dataCallback(User user) {
            if(user==null){
                Log.i("ansen", "请求失败");
            }else{
                Log.i("ansen", "获取用户信息:" + user.toString());
            }

        }
    };

发送post请求

post请求参数不是跟在url后面的,所以需要把请求参数放到集合里面。因为登录接口也是返回的用户信息,所以可以跟get请求用同一回调。

List<NameValuePair> postParam = new ArrayList<>();
postParam.add(new NameValuePair("username","ansen"));
postParam.add(new NameValuePair("password","123"));
HTTPCaller.getInstance().post(User.class, "http://139.196.35.30:8080/OkHttpTest/login.do", null, postParam, requestDataCallback);

上传文件

1.上传文件不带回调进度
updaloadFile(null);
2.上传文件回调上传进度
updaloadFile(new ProgressUIListener(){
    @Override
    public void onUIProgressChanged(long numBytes, long totalBytes, float percent, float speed) {
        Log.i("ansen","numBytes:"+numBytes+" totalBytes:"+totalBytes+" percent:"+percent+" speed:"+speed);
    }
});

上传文件跟其他表单参数不一样的地方就是new NameValuePair对象的时候需要传入三个参数,最后一个参数需要设置成true。

private void updaloadFile(ProgressUIListener progressUIListener){
    List<NameValuePair> postParam = new ArrayList<>();
    postParam.add(new NameValuePair("username", "ansen"));
    postParam.add(new NameValuePair("password", "123"));
    String filePath=copyFile();//复制一份文件到sdcard上,并且获取文件路径
    postParam.add(new NameValuePair("upload_file",filePath,true));
    if(progressUIListener==null){//上传文件没有回调进度条
        HTTPCaller.getInstance().postFile(User.class, "http://139.196.35.30:8080/OkHttpTest/uploadFile.do", null, postParam, requestDataCallback);
    }else{//上传文件并且回调上传进度
        HTTPCaller.getInstance().postFile(User.class, "http://139.196.35.30:8080/OkHttpTest/uploadFile.do", null, postParam, requestDataCallback,progressUIListener);
    }
}

上传文件(传入byte数组)

byte[] bytes=getUploadFileBytes();//获取文件内容存入byte数组
            HTTPCaller.getInstance().postFile(User.class, "http://139.196.35.30:8080/OkHttpTest/uploadFile.do", null, "upload_file","test.txt",bytes,requestDataCallback);

上传文件(传入byte数组)&&回调上传进度

byte[] bytes=getUploadFileBytes();//获取文件内容存入byte数组
HTTPCaller.getInstance().postFile(User.class, "http://139.196.35.30:8080/OkHttpTest/uploadFile.do", null, "upload_file", "test.txt", bytes, requestDataCallback, new ProgressUIListener() {
    @Override
    public void onUIProgressChanged(long numBytes, long totalBytes, float percent, float speed) {
        Log.i("ansen","upload file content numBytes:"+numBytes+" totalBytes:"+totalBytes+" percent:"+percent+" speed:"+speed);
    }
});

下载文件&&回调下载进度

String saveFilePath=Environment.getExternalStorageDirectory() + "/test/test222.txt";
HTTPCaller.getInstance().downloadFile("http://139.196.35.30:8080/OkHttpTest/upload/test.txt",saveFilePath,null,new ProgressUIListener(){
    @Override
    public void onUIProgressChanged(long numBytes, long totalBytes, float percent, float speed) {
        Log.i("ansen","dowload file content numBytes:"+numBytes+" totalBytes:"+totalBytes+" percent:"+percent+" speed:"+speed);
    }
});

修改公共参数

HTTPCaller.getInstance().updateCommonField("version_code","2");//更新公共字段版本号的值

源码下载

OkHttp如何封装点击这里

如果你想第一时间看我的后期文章,扫码关注公众号,每周不定期推送Android开发实战教程文章…

      Android开发666 - 安卓开发技术分享
             扫描二维码加关注

Android开发666

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

Android前沿技术—《OKHttp》

本次视频详细讲解了原生 OKHttp 和封装后 OKHttp 的使用方法,包括文件的上传、下载、大图片的加载等企业中最常用的方法。
  • 2016年09月12日 16:40

OKHttp的基本使用和简单封装

1.写在前面:   网络请求框架层出不穷,像google的volley,xutils等等。听说Okhttp性能很高,最近写新项目,决定用Okhttp来尝试一下(原谅我是小白,第一次使用,以前还是用v...
  • qq_16240393
  • qq_16240393
  • 2017-02-04 15:53:12
  • 1977

Android 一个改善的okHttp封装库

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

okHttp3自用封装

okHttp都已经出到3.2.0了,现在才开始要用到它,感觉自己好low~~ 根据平时自己的习惯,还是自己做一下封装,让代码撸起来更加顺畅一点! okhttp-3.2.0和okio-1.7.0就不多说...
  • wwwkp1236
  • wwwkp1236
  • 2016-05-11 15:56:49
  • 16519

Okhttputils终极封装

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

OKHTTP的单例和再封装

/** * Created by zm on 16-2-1 * okhttp的再封装,对于2.x版本,3.x版本将原有对okhttpclient配置 * 改成了builder模式配 * 置,对...
  • pangpang123654
  • pangpang123654
  • 2016-05-20 15:32:07
  • 5864

对OKHttp3的简单封装

一个完整的Android项目,肯定少不了网络请求的相关类。我整理了一下自己现在项目里二次封装的网络请求类,方便以后查阅,也希望大家指正。Http请求使用了现在主流的第三方库OKHttp3,数据是jso...
  • qq_33724789
  • qq_33724789
  • 2017-07-03 17:40:18
  • 919

OkHttp封装

### 前言 上个知识点介绍了OKHttp的基本使用,在Activity中写了大量访问网络的代码,这种代码写起来很无聊,并且对技术没什么提升。在真实的企业开发中,肯定是把这些代码封装起来,做一个库,...
  • lowprofile_coding
  • lowprofile_coding
  • 2017-08-31 18:21:36
  • 3067

基于MVP架构的OKHttp3的封装

一、OKHttp的优势 url测试地址:http://httpbin.org 二、首先对Response进行封装 ①定义IResponse接口 public interface IRespon...
  • qq_24675479
  • qq_24675479
  • 2017-10-30 12:50:54
  • 590

OKHTTP的简单封装

前言我们常用的网络框架大致有三个:Xutils,Volly,和OKhttp,前两个随着谷歌对OKhttp的推出基本上被取代了,既然被取代了,就肯定有它们的不足。 Xutils:博而不精,它包含的功能...
  • qiaoshi96_bk
  • qiaoshi96_bk
  • 2017-09-09 11:36:10
  • 356
收藏助手
不良信息举报
您举报文章:OkHttp封装之后使用
举报原因:
原因补充:

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