OkHttp 使用 get post UI线程回调 上传 下载 进度监听 更好地封装

前几天自己写了一个OkHttp的封装 因为自己在项目中有用到,包括post请求,自定义接口UI更新,上传下载进度显示 用起来也还行,该有的都有,但是今天看了一下网上一些关于OKHttp的资料,说来也是巧啊,我刚开始用OkHttp的时候也就前2个多月吧,相关资料那是相当的少啊,每次有问题都要在StackOverflow上找,短短一个月发现了最近特别多的大神,对于OKHttp的封装和介绍的blog,这也意味着OKHttp成为潮流吧…

说说从这些看到的blog中吸收到的知识吧。
-开始不明白为什么OkHttp在回调的时候是在子线程,后面发现他可以直接读取流,意味着这里是可以直接下载大文件的所以用在子线程,Volley是直接回调在UI线程,所以官方文档也有说不适合大文件上传下载,想想确实有道理;

前面博客也有介绍OKHttp的使用(发现写的有点乱)
http://blog.csdn.net/liubo20140401/article/details/48340955

这里做了更好封装 使用更加方便

这里把自己项目中 使用的 封装了一下 实现了 get postUI线程回调 上传 下载 进度监听

(如果图片查看不了 来这里 简书地址 CSDN限制上传大小了)
(简书地址)[http://www.jianshu.com/p/7d670eb07431]

GIF.gif

使用方法如下

Get 请求

 Request request=new Request.Builder()
            .get()
            .tag(this)
            .url("http:www.baidu.com")
            .build();

    DOkHttp.getInstance().getData4Server(request, new OkHttpUtil.MyCallBack() {
        @Override
        public void onFailure(Request request, IOException e) {

        }

        @Override
        public void onResponse(String json) {
            changeUI();
        }
    });

Post 请求

RequestBody requestBody=new FormEncodingBuilder()
            .add("key","value")
            .addHeader(COOKIE, sessionId)  //cookie添加
            .build();

    Request request=new Request.Builder()
            .post(requestBody)
            .tag(this)
            .url("http:www.baidu.com")
            .build();

    DOkHttp.getInstance().getData4Server(request, new OkHttpUtil.MyCallBack() {
        @Override
        public void onFailure(Request request, IOException e) {

        }

        @Override
        public void onResponse(String json) {
            changeUI();
        }
    });

download progress监听

    Request request=new Request.Builder()
            .tag(this)
            .get()
            .url("http://7xnbj0.com1.z0.glb.clouddn.com/IMG_1919.jpg")
            .build();

    DOkHttp.getInstance().download4ServerListener(request, new DOkHttp.MyCallBack_Progress() {
        @Override
        public void onFailure(Request request, IOException e) {

        }

        @Override
        public void onResponse(Response response) {
            file=FileUtils.saveFile2Local(response,dir,"download.jpg");
            progressDialog.dismiss();
        }
    }, new DOkHttp.UIchangeListener() {
        @Override
        public void progressUpdate(long bytesWrite, long contentLength, boolean done) {
            int progress= (int) (bytesWrite*100/contentLength);
            Log.e("Download",progress+"");

            progressDialog.setProgress(progress);

            tv_show.append(progress+"\n");
        }
    });

upload progress监听

    MultipartBuilder mb = new MultipartBuilder();
    mb.type(MultipartBuilder.FORM);
    mb.addFormDataPart("user_id", "74");
    mb.addFormDataPart("user_head", file.getName(), RequestBody.create(null, file));
    RequestBody requestBody = mb.build();

    String url="接口地址";

    DOkHttp.getInstance().uploadPost2ServerProgress(this,url,requestBody,new DOkHttp.MyCallBack(){

        @Override
        public void onFailure(Request request, IOException e) {
            tv_show.setText(e.getMessage());
        }

        @Override
        public void onResponse(String json) {
            progressDialog.dismiss();
            tv_show.setText(json);
        }
    },new DOkHttp.UIchangeListener(){

        @Override
        public void progressUpdate(long bytesWrite, long contentLength, boolean done) {
            int progress= (int) (bytesWrite*100/contentLength);

            progressDialog.setProgress(progress);

            tv_show.append(progress+"\n");
        }
    });

大致使用就这样

Demo 上传到了 github 地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值