美文网首页安卓okhttpAndroid开发
流行网络框架okHttp的使用

流行网络框架okHttp的使用

作者: Went_Gone | 来源:发表于2016-08-24 16:51 被阅读1499次

    引用项目地址:https://github.com/hongyangAndroid/okhttputils

    okhttp-utils是对okhttp的小小封装,使得使用更加方便,对应的okhttp版本是3.3.1

    用法

    Android Studio

    compile 'com.zhy:okhttputils:2.6.2'
    

    对其进行的封装有:

    一般的get请求
    一般的post请求
    基于Http Post的文件上传(类似表单)
    文件下载/加载图片
    上传下载的进度回调
    支持取消某个请求
    支持自定义Callback
    支持HEAD、DELETE、PATCH、PUT
    支持session的保持
    支持自签名网站https的访问,提供方法设置下证书就行
    

    配置OkHttpClient

    默认情况下,将直接使用okhttp默认的配置生成OkhttpClient,如果你有任何配置,记得在Application中调用initClient方法进行设置。

    public class BaseApplication extends Application{
        private static BaseApplication application;
        public static BaseApplication getInstance(){
            return application;
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
            OkHttpClient okHttpClient = new OkHttpClient.Builder()
    //                .addInterceptor(new LoggerInterceptor("TAG"))
                    .connectTimeout(10000L, TimeUnit.MILLISECONDS)
                    .readTimeout(10000L, TimeUnit.MILLISECONDS)
                    //其他配置
                    .build();
            OkHttpUtils.initClient(okHttpClient);
    
        }
    }
    

    用法实例:

    Get请求

        OkHttpUtils
                .get()
                .url(url)
        .addParams("username", "WentGone")
        .addParams("password", "123")
        .build()
        .execute(new StringCallback()
        {
            @Override
            public void onError(Request request, Exception e)
            {
    
            }
    
            @Override
            public void onResponse(String response)
            {
    
            }
        });
    

    Post请求

     OkHttpUtils.post()
                .url(url)
        .addParams("username", "WentGone")
        .addParams("password", "123")
        .build()
        .execute(callback);
    

    PostString请求

    OkHttpUtils.postString()
                .url(url)
        .content(new Gson().toJson(new User("WentGone", "123")))
                .build()
        .execute(new MyStringCallback());
    

    提交一个Gson字符串到服务器端。

    PostFile请求

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

    将文件作为请求体,发送到服务器。

    Post表单形式上传文件

     OkHttpUtils.post()//
                .addFile("mFile", "msg1.png", file)//
        .addFile("mFile", "test1.txt", file2)//
        .url(url)
        .params(params)//
        .headers(headers)//
        .build()//
        .execute(new MyStringCallback());
    

    支持单个多个文件,addFile的第一个参数为文件的key,即类别表单中<input type="file" name="mFile"/>的name属性。

    自定义CallBack

    目前内部包含StringCallBack,FileCallBack,BitmapCallback,可以根据自己的需求去自定义Callback,例如希望回调User对象:

       OkHttpUtils.get()//
                .url(url)//
        .addParams("username", "WentGone")//
        .addParams("password", "123")//
        .build()//
        .execute(new UserCallback()
        {
            @Override
            public void onError(Request request, Exception e)
            {
                mTv.setText("onError:" + e.getMessage());
            }
    
            @Override
            public void onResponse(User response)
            {
                mTv.setText("onResponse:" + response.username);
            }
        });
    

    下载文件

      OkHttpUtils.get()
                 .url(url)
                 .build()
                 .execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(), "gson-2.2.1.jar")//
        {
            @Override
            public void inProgress(float progress)
            {
                mProgressBar.setProgress((int) (100 * progress));
            }
    
            @Override
            public void onError(Request request, Exception e)
            {
                Log.e(TAG, "onError :" + e.getMessage());
            }
    
            @Override
            public void onResponse(File file)
            {
                Log.e(TAG, "onResponse :" + file.getAbsolutePath());
            }
        });
    

    注意下载文件可以使用FileCallback,需要传入文件需要保存的文件夹以及文件名。

    显示图片

      OkHttpUtils.get()
                 .url(url)
                 .build()
                 .execute(new BitmapCallback()
        {
            @Override
            public void onError(Request request, Exception e)
            {
                mTv.setText("onError:" + e.getMessage());
            }
    
            @Override
            public void onResponse(Bitmap bitmap)
            {
                mImageView.setImageBitmap(bitmap);
            }
        });
    

    显示图片,回调传入BitmapCallback即可。

    上传下载的进度显示

    new Callback<T>()
        {
            //...
            @Override
            public void inProgress(float progress)
            {
                //use progress: 0 ~ 1
            }
        }
    

    callback回调中有inProgress方法,直接复写即可。

    同步的请求

    Response response = OkHttpUtils.get()
                .url(url)
                .tag(this)
                .build()
                .execute();
    

    execute方法不传入callback即为同步的请求,返回Response。

    取消单个请求

    RequestCall call = OkHttpUtils.get().url(url).build(); 
    call.cancel();
    

    根据tag取消请求

    目前对于支持的方法都添加了最后一个参数Object tag,取消则通过OkHttpUtils.cancelTag(tag)执行。
    例如:在Activity中,当Activity销毁取消请求:

    OkHttpUtils.get()
        .url(url)
        .tag(this)
        .build()
    
        @Override
        protected void onDestroy()
        {
            super.onDestroy();
            //可以取消同一个tag的
            OkHttpUtils.cancelTag(this);//取消以Activity.this作为tag的请求
        }
    

    比如,当前Activity页面所有的请求以Activity对象作为tag,可以在onDestory里面统一取消。

    混淆

    #okhttputils
    -dontwarn com.zhy.http.**
    -keep class com.zhy.http.**{*;}
    
    
    #okhttp
    -dontwarn okhttp3.**
    -keep class okhttp3.**{*;}
    
    
    #okio
    -dontwarn okio.**
    -keep class okio.**{*;}
    

    相关文章

      网友评论

        本文标题:流行网络框架okHttp的使用

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