Android框架之OKHttpUtils

OKHttpUtils是对OKHttp的一个封装类,OKHttp有很多功能:如文件上传、下载;文本数据的请求get和提交post;下载图片等

 

需要导入三个jar包:okhttp-3.4.1.jar、okhttputils-2_6_2.jar、okio-1.9.0.jar,我已经收集出来,下面是下载地址

百度云盘地址:https://pan.baidu.com/s/1O6kBWu0PNGGtWcbwLwWLmg

密码:cugv

 

回调类:okhttpUtils是获取http服务器连接前后,会调用类里的各种方法
AbsCallback: 所有回调的父类,抽象类

StringCallBack:如果返回值类型是纯文本数据,即可使用该回调
BitmapCallback:如果请求的是图片数据,则可以使用该回调
FileCallBack:如果要做文件下载,则必须使用该回调,内部封装了关于文件下载进度回调的方法

1,CallBackString类的onResponse方法中返回值是String类型。
2,CallBackBitmap类的onResponse方法中返回值是Bitmap类型。
3,CallBackFile类的onResponse方法中返回值是File类型。

回调类有以下方法(可以重写回调类里的方法,实现文件下载前的动画演示,文件下载进度等等设置):

以StringCallback为例子:

class MyStringCallback extends StringCallback {
        //与服务器连接错误调用方法
        @Override
        public void onError(Call call, Exception e, int i) {
            Toast.makeText(OkhttpUtilsActivity.this,e.getMessage(),Toast.LENGTH_LONG).show();
        }
        //连接成功,服务器返回数据方法,s为获得的数据
        @Override
        public void onResponse(String s, int i) {
            //textView.setText("请求返回值:"+s);
        }
        //返回进度的方法
        @Override
        public void inProgress(float progress, long total, int id) {
            // super.inProgress(progress, total, id);
            System.out.println("进度"+100 * progress);
        }
        //与服务器连接之后调用方法(不管get或post是否成功都会调用该方法)
        @Override
        public void onAfter(int id) {
            //super.onAfter(id);
            Toast.makeText(OkhttpUtilsActivity.this,"服务器连接完成",Toast.LENGTH_LONG).show();
        }
        //与服务器连接之前调用方法
        @Override
        public void onBefore(Request request, int id) {
            //super.onBefore(request, id);
            Toast.makeText(OkhttpUtilsActivity.this,"开始连接服务器",Toast.LENGTH_SHORT).show();
        }
    }

上面是获取OkhttpUtils设置获取http连接前后回调类的方法,下面才是真正使用OKhttpUtils的方法

    //get请求文本
    public void getHttpText() throws Exception {
        OkHttpUtils
                .get()
                .url("http://www.baidu.com")
                .addParams("username", "heyman")
                .addParams("password", "123")
                .id(20)
                .build()
                .execute(new MyStringCallback());
    }
   //post提交文本
    public void postHttpText(){
        String url = "http://www.baidu.com";
        OkHttpUtils
                .post()
                .url(url)
                .id(100)
                .build()
                .execute(new MyStringCallback());
    }
    //下载文件
    public void downloadFile(){
        OkHttpUtils//
                .get()//
                .url("http://vfx.mtime.cn/Video/2016/07/24/mp4/160724055620533327_480.mp4")//
                .build()//
                .execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(),"MyMusic.mp4"){
                    @Override
                    public void onError(Call call, Exception e, int i) {
                    }
                    @Override
                    public void onResponse(File file, int i) {

                    }
                    @Override
                    public void inProgress(float progress, long total, int id) {
                        super.inProgress(progress, total, id);
                        progressBar.setProgress((int) (100 * progress));
                    }

                });
    }

 上传文件还需要一个已经编写好的Servlet的war文件来做测试,将他放入tomcat服务器的webapps目录下,启动tomcat服务器

在这给出百度云盘链接:https://pan.baidu.com/s/1fzSLh7yMSq5ypoWVsTylSg

云盘链接密码:6v0z

    //上传多个或者单个文件
    public void uploadFile(){
        //192.168.1.104为本机IP地址
        //由于端口冲突:http://192.168.1.104:8080为tomcat地址
        //http://192.168.1.104为apache地址
        String url = "http://192.168.1.104:8080/FileUpload/FileUploadServlet";
        File fileOne = new File(Environment.getExternalStorageDirectory(), "tiao.mp4");
        File fileTWo = new File(Environment.getExternalStorageDirectory(), "shumei.txt");
        if (!fileOne.exists() || !fileTWo.exists()) {
            Toast.makeText(OkhttpUtilsActivity.this, "文件不存在,请修改文件路径", Toast.LENGTH_SHORT).show();
            return;
        }
        Map<String, String> paramsMap= new HashMap<>();
        //填写用户名与密码,有的服务器需要
        paramsMap.put("username", "name");
        paramsMap.put("password", "123");

        OkHttpUtils.post()
                .addFile("mFile", "server_afu.mp4", fileOne)
                .addFile("mFile", "server_test.txt", fileTWo)
                .url(url)
                .params(paramsMap)
                .build()
                .execute(new MyStringCallback());
    }
    //获取图片
    public void getPicture()
    {
        String url = "http://images.csdn.net/20150817/1.jpg";
        String url2="http://pics.sc.chinaz.com/files/pic/pic9/201807/bpic7704.jpg";
        OkHttpUtils
                .get()
                .url(url2)
                .tag(this)
                .build()
                .connTimeOut(20000)
                .readTimeOut(20000)
                .writeTimeOut(20000)
                .execute(new BitmapCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {

                    }

                    @Override
                    public void onResponse(Bitmap bitmap, int id) {
                        Log.e("TAG", "onResponse:complete");
                        imageView.setImageBitmap(bitmap);
                    }
                });
    }
    //使用okhttp-utils上传多个或者单个文件(带参数):
    public void multiFileUpload()
    {
        HashMap<String, String> map = new HashMap<>();
        map.put("Action", "AppVersion");
        map.put("Version", "ss");
        map.put("Type", "1");

        String url = "请求接口地址" ;
        OkHttpUtils.post()
                .url(url)
                .params(map)
                .build()
                .execute(new MyStringCallback());
    }

 最后要在活动的onDestroy里重写取消与http的连接

    public void onPause() {
        super.onPause();
        //取消网络请求,根据tag取消请求
        OkHttpUtils.getInstance().cancelTag(this);
    }

 

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值