Android 开源框架 ( 二 ) 基于OkHttp进一步封装的okhttp-utils介绍

  okhttp-utils是张鸿洋是基于OkHttp封装的框架库。实际工作中,使用的不多,对于小型项目的网络请求和文件传输可以考虑直接使用。否则还是基于主流的OkHttp+Retrift+RxJava框架。

  对于OkHttp使用,可以自己根据自己项目需要,做一些封装。如果应付手头临时项目,可以借鉴GitHub上一些开源OkHttp封装库.只要去GitHub上搜索下OkHttp 会出来很多封装的框架。

  分析okhttp-utils使用,只是用于自己学习了解。

一.将okhttp-utils当做module引入项目中

    

二.okhttp-utils引入到项目中文件列表目录:

        

三.okhttp-utils 基本使用

  1. //get 请求数据

OkHttpUtils
        .get()
        .url(url)
        .id(100)
        .build()
        .execute(new MyStringCallback());

  2.//post 请求数据

OkHttpUtils
        .postString()
        .url(url)
        .mediaType(MediaType.parse("application/json; charset=utf-8"))
        .content(new Gson().toJson(new User("zhy", "123")))
        .build()
        .execute(new MyStringCallback());        

  3.//上传文件

OkHttpUtils
        .postFile()
        .url(url)
        .file(file)
        .build()
        .execute(new MyStringCallback());

  4.//加载图片

OkHttpUtils
        .get()
        .url(url)
        .tag(this)
        .build()
        .connTimeOut(20000)
        .readTimeOut(20000)
        .writeTimeOut(20000)
        .execute(new BitmapCallback()
        {
            @Override
            public void onError(Call call, Exception e, int id)
            {
                mTv.setText("onError:" + e.getMessage());
            }

            @Override
            public void onResponse(Bitmap bitmap, int id)
            {
                Log.e("TAG", "onResponse:complete");
                mImageView.setImageBitmap(bitmap);
            }
        });    

  5.//上传单个文件

OkHttpUtils.post()//
        .addFile("mFile", "messenger_01.png", file)
        .url(url)
        .params(params)//带表单数据
        .headers(headers)
        .build()
        .execute(new MyStringCallback());    

  6.//上传多个文件

OkHttpUtils.post()
        .addFile("mFile", "messenger_01.png", file)
        .addFile("mFile", "test1.txt", file2)
        .url(url)
        .params(params)//带表单数据
        .build()
        .execute(new MyStringCallback());    

  7.//下载文件

OkHttpUtils
        .get()
        .url(url)
        .build()
        .execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(), "gson-2.2.1.jar")
        {

            @Override
            public void onBefore(Request request, int id)
            {
            }

            @Override
            public void inProgress(float progress, long total, int id)
            {
                //进度条显示
                mProgressBar.setProgress((int) (100 * progress));
                Log.e(TAG, "inProgress :" + (int) (100 * progress));
            }

            @Override
            public void onError(Call call, Exception e, int id)
            {
                Log.e(TAG, "onError :" + e.getMessage());
            }

            @Override
            public void onResponse(File file, int id)
            {
                Log.e(TAG, "onResponse :" + file.getAbsolutePath());
            }
        });    

  定义的公共回调方法:

public class MyStringCallback extends StringCallback
    {
        @Override
        public void onBefore(Request request, int id)
        {
        }

        @Override
        public void onAfter(int id)
        {
        }

        @Override
        public void onError(Call call, Exception e, int id)
        {
            e.printStackTrace();
        }

        @Override
        public void onResponse(String response, int id)
        {
            Log.e(TAG, "onResponse:complete");
            mTv.setText("onResponse:" + response);

            switch (id)
            {
                case 100:
                    Toast.makeText(MainActivity.this, "http", Toast.LENGTH_SHORT).show();
                    break;
                case 101:
                    Toast.makeText(MainActivity.this, "https", Toast.LENGTH_SHORT).show();
                    break;
            }
        }

        @Override
        public void inProgress(float progress, long total, int id)
        {
            Log.e(TAG, "inProgress:" + progress);
            mProgressBar.setProgress((int) (100 * progress));
        }
    }        

 

posted @ 2018-07-29 11:24  FreeFunCode  阅读(1124)  评论(0编辑  收藏  举报