美文网首页
OkHttp 使用 get post UI线程回调 上传 下载

OkHttp 使用 get post UI线程回调 上传 下载

作者: Daemon1993 | 来源:发表于2015-12-23 10:48 被阅读2773次

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

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

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

    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 地址

    相关文章

      网友评论

          本文标题:OkHttp 使用 get post UI线程回调 上传 下载

          本文链接:https://www.haomeiwen.com/subject/tvqmcttx.html