Okhttputils终极封装

原创 2017年02月13日 15:01:36

前言:

项目源码

https://github.com/yulyu2008/XiayuOkHttp

Okhttputils是张鸿洋基于okhhttp封装的一个框架,使用起来很方便,相信很多人都用到过,这里我们在这个框架的基础上二次封装,让我们用起来更加方便.

主要功能:

  • 可以添加统一的头信息
  • 统一处理异常
  • 自动注入加载动画(可选)
  • 自动解析bean对象
  • 结合Stetho,调试更方便

1.添加依赖

compile 'com.zhy:okhttputils:2.6.2'
compile 'com.squareup.okhttp3:okhttp:3.3.1'
compile 'com.google.code.gson:gson:2.5'
compile 'com.facebook.stetho:stetho-okhttp3:1.3.1'
debugCompile 'com.facebook.stetho:stetho:1.1.1'

2.初始化(配置统一头和拦截器等)

public class MyApplication extends Application
{
    @Override
    public void onCreate()
    {
        super.onCreate();

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(new LoggerInterceptor("TAG"))
                .addNetworkInterceptor(new Interceptor() {//自定义拦截器
                    @Override
                    public Response intercept(Chain chain) throws IOException {
                        Request  request  = chain.request();
                        //配置统一的头
                        Request  newRequest     = request.newBuilder().addHeader("head", "xiayu").build();
                        return  chain.proceed(newRequest);
                    }
                })
                .addNetworkInterceptor( new StethoInterceptor())//增加Stetho拦截器,用于调试
                .connectTimeout(10000L, TimeUnit.MILLISECONDS)
                .readTimeout(10000L, TimeUnit.MILLISECONDS)
                //其他配置
                .build();
        //使用自定义OkHttpClient
        OkHttpUtils.initClient(okHttpClient);

    }
}

注意记得在清单文件中配置Application和网络权限

Stetho的初始化和使用这里就不做介绍了,可以参考这篇文章
FaceBook调试神器Stetho

http://blog.csdn.net/yulyu/article/details/54980871

3.自定义callback

public abstract class XiayuCallBack<T> extends Callback<T> {
    Class mClass;
    private Context        mContext;
    private boolean        mIsShowDialog;
    private ProgressDialog progressDialog;
    private Request        mRequest;
    public static Gson mGson = new Gson();

    public XiayuCallBack(Class targetClazz, Context context, boolean isShowDialog) {
        mClass = targetClazz;
        mContext = context;
        mIsShowDialog = isShowDialog;
    }

    public XiayuCallBack(Class<T> targetClazz, Context mContext) {
        this(targetClazz, mContext, false);//默认不开启动画
    }


    @Override
    public T parseNetworkResponse(Response response, int id) throws Exception {
        T t = null;
        try {
            //解析json,返回bean对象
            t = (T) mGson.fromJson(response.body().string(), mClass);
        } catch (JsonSyntaxException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return t;
    }

    @Override
    public void onError(Call call, Exception e, int id) {
        //在这里做异常统一处理
        System.out.println("onError");
        myError(call, e, id);
    }

    public abstract void myError(Call call, Exception e, int id);

    @Override
    public void onBefore(Request request, int id) {
        //这里开启动画
        mRequest = request;
        if (mIsShowDialog && mContext != null) {
            if (progressDialog == null) {
                progressDialog = new ProgressDialog(mContext);
                progressDialog.setCancelable(false);
            }
            if (mContext instanceof Activity && !((Activity) mContext).isFinishing()) {
                progressDialog.show();
            }
        }
        super.onBefore(request, id);
    }

    @Override
    public void onAfter(int id) {
        //这里结束动画
        try {
            if (progressDialog != null && progressDialog.isShowing()) {
                progressDialog.dismiss();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        super.onAfter(id);
    }

}

4.抽取方法

public class MovieUtils {
    public static void getMovie(int start, int count, XiayuCallBack<MovieEntity> callBack) {
        OkHttpUtils.get()
                .url("https://api.douban.com/v2/movie/top250")
                .addHeader("MovieUtils","start")
                .addParams("start",start+"")
                .addParams("count",count+"")
                .build()
                .execute(callBack);
    }
}

5.使用网络请求

MovieUtils.getMovie(0, 10, new XiayuCallBack<MovieEntity>(MovieEntity.class, this, true) {
            @Override
            public void myError(Call call, Exception e, int id) {
                //失败
            }

            @Override
            public void onResponse(MovieEntity response, int id) {
                //成功
            }
        });

6.项目源码

https://github.com/yulyu2008/XiayuOkHttp

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android 一个改善的okHttp封装库

转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49734867; 本文出自:【张鸿洋的博客】 一、概述之前写了篇An...
  • lmj623565791
  • lmj623565791
  • 2015年12月15日 14:36
  • 193728

鸿洋大神封装的okhttputils拿走不谢!

compile ‘com.zhy:okhttputils:2.6.2’
  • xiyangyang8110
  • xiyangyang8110
  • 2016年09月23日 14:11
  • 2074

基于鸿洋okhttp封装工具类okhttputils 返回数据回调封装

简介okhttputils 是csdn 鸿洋大神基于okhttp网络请求进行的二次封装基本请求格式如下OkHttpUtils .get() .url(url) .addParams("username...
  • jiushiwo12340
  • jiushiwo12340
  • 2017年05月27日 13:53
  • 5144

OKHttpUtils使用介绍

在上一篇blog的末尾讲到了OKHttp使用时的缺点,和对OKHttp封装的必要性。在github上有很多对OKHttp封装的优秀框架,其首推的就是hongyang大神的OKHttpUtils。关于h...
  • fightingXia
  • fightingXia
  • 2017年04月29日 17:55
  • 5302

OkHttpUtils一个专注于让网络请求更简单的框架

1.支持的常用功能 一般的 get,post,put,delete,head,options请求基于Post的大文本数据上传,postString(),postJson()等多文件和多参数统一的...
  • hehe307
  • hehe307
  • 2016年06月22日 13:44
  • 10116

OkHttpUtils - 封装了okhttp的网络框架

OkHttpUtils OkHttpUtils - 封装了okhttp的网络框架,目前Get,Post的请求已经完成,支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一起...
  • liubcsdn
  • liubcsdn
  • 2016年09月14日 14:46
  • 1285

OkHttpUtils

  • 2016年09月25日 23:39
  • 4.16MB
  • 下载

okhttp-utils

okhttp-utils 出处:https://github.com/hongyangAndroid/okhttp-utils 对okhttp的封装类,okhttp见:https://gith...
  • ChengFuture
  • ChengFuture
  • 2016年05月30日 10:58
  • 4681

okHttpUtils(hongyang)的配置及使用(网络框架)

okHttpUtils(hongyang)的配置及使用(网络框架)
  • lixiang_Y
  • lixiang_Y
  • 2017年04月13日 19:19
  • 5070

OkHttpUtils的集成

因为近期学习了OkHttpUtilts的使用,所以想在这里说明一下项目集成OkHttpUtils中遇到的坑,做一个记录,也想帮助想集成OkHttpUtils的朋友能快速找到问题,定位问题,然后解决问题...
  • u013823101
  • u013823101
  • 2016年12月13日 13:46
  • 2278
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Okhttputils终极封装
举报原因:
原因补充:

(最多只允许输入30个字)