封装一个通用的 okhttp 库

作者: 夏至,欢迎转载,但请保留这段申明,谢谢
http://blog.csdn.net/u011418943/article/details/77069815

github 链接:https://github.com/LillteZheng/okhttplib.git

内容包括

这个一个封装好的 okhttp 的库,里面包含了如下:

  • get方法,可以添加参数
  • 封装好的Gson
  • 下载图片,再自定义图片大小进行压缩后存储
  • 下载文件,并显示进度
  • 多线程下载文件,并显示进度
  • post发送 key - value
  • post 发送字符串或者json
  • post 发送文件,并显示上传进度
  • post 发送表单,变显示上传进度

2 、怎么使用

Download

Step 1、 Add the JitPack repository in your root build.gradle at the end of repositories:

    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

Step 2. Add the dependency

dependencies {
            compile 'com.github.LillteZheng:okhttplib:v1.1'
    }

3、初始化

 OkHttpClient okHttpClient = new OkHttpClient.Builder()
                    .readTimeout(TIME_OUT, TimeUnit.SECONDS)
                    .connectTimeout(TIME_OUT, TimeUnit.SECONDS)
                    .writeTimeout(TIME_OUT+TIME_OUT,TimeUnit.SECONDS)
                    .cookieJar(new PersistentCookieJar(new SetCookieCache(),new SharedPrefsCookiePersistor(this)))
                    .build();



        mClient = OkHttpCommonClient.getInstance();
        mClient.setOkhttpClient(okHttpClient);

基本使用:

//使用get方法获取数据,
        mClient.getBuilder()
                .url(Weather_baseurl)
                .putParams("key","m9datavogh53ftie")
                .putParams("location","shenzhen")
                .builder()
                .enqueue(new StringResponse() { //使用不同的 response
                    @Override
                    public void onSuccess(String response) { //返回你需要的值,比如这里的String,或者json等等
                        Log.d(TAG, "builder: "+response);
                    }

                    @Override
                    public void onFailure(Object errorObj) {

                    }
                });

Gson

mClient.getBuilder()
                .url(gsonurl)
                .builder()
                //在这里把json的实体类写在这里即可,比如我的root.class
                .enqueue(new JsonResponse(Root.class) { //这里的颜色区域是 jdk1.5的警告,
                                                        // 因为用的是泛型,直接关掉即可。
                    @Override
                    public void onSuccess(Object response) {
                        Root root = (Root) response;
                        Log.d(TAG, "onSuccess: "+root.getContent());
                    }

                    @Override
                    public void onFailure(Object errorObj) {

                    }
                });

图片

 mClient.getBuilder()
                .url(imgurl)
                .builder()
                .enqueue(new BitmapResponse(230,150) { //这里可以设置图片的大小,不写则下载原始图片
                    @Override
                    public void onSuccess(Bitmap response) {
                        img.setImageBitmap(response);
                    }

                    @Override
                    public void onFailure(Object errorObj) {
                        Log.d(TAG, "onFailure: "+errorObj.toString());
                    }
                });

文件下载,单线程:

 String path = Environment.getExternalStorageDirectory().getPath();
        mClient.getBuilder()
                .url(fileurl)
                .builder()
                .enqueue(new FileResponse(fileurl,path) {
                    @Override
                    public void onProgress(int progress) {
                        Log.d(TAG, "onProgress: "+progress);
                    }

                    @Override
                    public void onSuccess(String response) {
                        Log.d(TAG, "onSuccess: "+response);
                    }

                    @Override
                    public void onFailure(Object errorObj) {
                        Log.d(TAG, "onFailure: "+errorObj.toString());
                    }
                });

文件下载,多线程

String path = Environment.getExternalStorageDirectory().getPath();

        mClient.getBuilder()
                .url(fileurl)
                .builder()
                .enqueue(new FileMultResponse(fileurl,path,3) {
                    @Override
                    public void onProgress(int progress) {
                        Log.d(TAG, "onProgress: "+progress);
                    }

                    @Override
                    public void onSuccess(String response) {
                        Log.d(TAG, "onSuccess: "+response);
                    }

                    @Override
                    public void onFailure(Object errorObj) {
                        Log.d(TAG, "onFailure: "+errorObj.toString());
                    }
                });

4、 post 方法

基本使用

 mClient.postBuilder()
                .url(BASEURL+"login")
                .putParams("username","zhengshaorui")
                .putParams("password","123456789")
                .builder()
                .enqueue(new StringResponse() {
                    @Override
                    public void onSuccess(String response) {
                        Log.d(TAG, "onSuccess: "+response);
                    }

                    @Override
                    public void onFailure(Object errorObj) {
                        Log.d(TAG, "onFailure: "+errorObj.toString());
                    }
                });

post String

 mClient.postStringBuilder()
                .url(BASEURL+"getString")
                .addMedieType("text/plain;chaset-utf-8","{username:rachel,password:123}")
                .builder()
                .enqueue(new StringResponse() {
                    @Override
                    public void onSuccess(String response) {

                    }

                    @Override
                    public void onFailure(Object errorObj) {

                    }
                });

Post File 显示上传进度

File file = new File(Environment.getExternalStorageDirectory(),"TvHouseManager.apk");
        if (!file.exists()){
            Toast.makeText(this, "TvHouseManager.apk" + "文件不存在", Toast.LENGTH_SHORT).show();
            return;
        }
        mClient.postFileBuilder()
                .url(BASEURL+"getFile")
                .addMedieType("application/vnd.android.package-archive",file)
                .builder()
                .enqueue(new StringResponse() {
                    @Override
                    public void onSuccess(String response) {

                    }

                    @Override
                    public void onFailure(Object errorObj) {

                    }

                    @Override
                    public void onUploadProgress(int progress) {
                        super.onUploadProgress(progress);
                        Log.d(TAG, "onUploadProgress: "+progress);
                    }
                });

Post form 也显示上传进度

File file = new File(Environment.getExternalStorageDirectory(),"tvlog.jpg");
        if (!file.exists()){
            Toast.makeText(this, "tvlog.jpg" + "文件不存在", Toast.LENGTH_SHORT).show();
            return;
        }

        mClient.postUploadFile()
                .url(BASEURL+"UpdateInfo")
                .addFile("mPic","mTestPhone.jpg",file)
                .addPart("username","zhengshaorui")
                .addPart("password","10086")
                .builder()
                .enqueue(new StringResponse() {
                    @Override
                    public void onSuccess(String response) {

                    }

                    @Override
                    public void onFailure(Object errorObj) {

                    }

                    @Override
                    public void onUploadProgress(int progress) {
                        super.onUploadProgress(progress);
                        Log.d(TAG, "onUploadProgress: "+progress);
                    }
                });
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值