WeHttp:一个基于OkHttp的面向Android开发的网络库封装

1,293 阅读4分钟
原文链接: leoray.leanote.com
WeHttp:一个基于OkHttp的面向Android开发的网络库封装 发布于 2017-10-02   3人围观  0条评论

WeHttp 简介

一个基于OkHttp3的面向Android开发的网络库封装,另外包含了一个简易的JSON转换库.

GitHub地址: github.com/leishengwei…
WeHttp特性:

  1. 本库遵循Android的开发习惯. 可以在Application#onCreate()中进行初始化,然后在发送网络请求的可以调用静态方法一键发送请求.
  2. 内置了基于WebView的Cookie管理
  3. 支持自定义JSON转换器并且内置了一个JSON转换器.
  4. 封装了公共header和Query,pin校验,log,网络代理等配置
  5. 发送请求支持各种请求方法,请求体支持文本,JSON,文件,MultiPart,Pojo等多种类型,且可以自己判断设置MediaType.
  6. 支持类似RxJava方式的回调.
  7. 支持配置返回OkHttp原生配置就行配置;支持请求返回原生OkHttp的Response进行个性化操作.
  8. 支持一键取消请求
  9. 支持多个网络配置(通过非静态的WeOkHttp).
  10. 只依赖OkHttp及其本身依赖的OkIo.

初始化

/**
 * 全局配置
*/
//自定义JSON转换器:默认WeJson
TypeAdapter adapter = new TypeAdapter() {
    @Override
    public <T> T from(String s, Class<T> classOfT) {
        return null;
    }

    @Override
    public <T> String to(T t) {
        return null;
    }
};
//自定义Cookie管理策略,默认不管理Cookie
WeCookie weCookie = new WeCookie() {
    @Override
    public void clearCookie() {

    }

    @Override
    public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {

    }

    @Override
    public List<Cookie> loadForRequest(HttpUrl url) {
        return null;
    }
};
WeHttp.init()
        //自定义JSON转换器,默认使用的是内置的WeJson
        .adapter(adapter)
        //定义全局header
        .header("world", "world")
        .header("hello", "hello")
        //定义全局的param,就是url中的键值对参数
        .params("key", "value")
        //定义PIN校验
        .addPin("", "")
        //设置base url
        .baseUrl("...")
        //定义Cookie保存策略
        .cookie(weCookie)
        //也可以选择使用内置的Android WebView管理Cookie
        .cookieWebView(null)
        //设置代理
        .proxy("ip", 80, "username", "password")
        //设置日志级别
        .log(WeLog.Level.NONE)
        //设置超时时间
        .timeout(1000, 1000, 1000)
        //拿到OkHttp的配置对象进行配置
        .clientConfig().retryOnConnectionFailure(true);
//这些配置的生效时间为第一次调用请求时

发送请求

//这里定义的返回类型都是String(为了例子简单,不想多定义其他类了),开发者可以设置为自己的POJO对象
//这里都是演示调用,无法执行

//同步GET请求
WeHttp.<String>get("get url")
        //单个Query
        .param("key", "value")
        //批量添加Query
        .param(new HashMap<String, String>())
        //设置tag
        .tag("tag")
        //执行
        .execute(String.class);

//POST 异步请求
WeHttp.<String>post("post url")
        //post请求体有多种选择
        .bodyJson("{}") //json 请求
        .bodyText("text") //plain text请求
        .bodyFile(new File("")) //文件请求
        //传入一个POJO对象, 如果POJO中有有效文件则为MultiPart请求,否则为JSON请求
        .body(null)
        //一旦传入下面两个方法,请求会自动转换为MultiPart类型
        .addPart("name", new File(""), WeMediaType.PNG)
        .addBodyQuery("name", "value")
        //回调都在主线程,onStart()在execute()调用所在线程
        .execute(String.class, new WeReq.WeCallback<String>() {
            @Override
            public void onStart(WeReq call) {

            }

            @Override
            public void onFinish() {

            }

            @Override
            public void onFailed(WeReq call, int type, int code, String msg, IOException e) {

            }

            @Override
            public void onSuccess(WeReq call, String data) {

            }
        })
        //也可以使用一个默认的Callback,只需要实现success和failed两个方法
        .execute(String.class, new WeBaseCallback() {
            @Override
            public void success(WeReq call, Object o) {

            }

            @Override
            public void failed(WeReq call, int type, int code, String msg, IOException e) {

            }
        })
;

//其他请求,delete,put,patch等
WeHttp.delete("delete url");

//取消请求:通过前面定义的tag
WeHttp.cancel("tag");

//类似RxJava的subscribe回调方式
Observable subscribe = WeHttp.<String>get("").subscribe(String.class);
subscribe.subscribe(new WeReq.WeCallback<String>() {
    @Override
    public void onStart(WeReq call) {

    }

    @Override
    public void onFinish() {

    }

    @Override
    public void onFailed(WeReq call, int type, int code, String msg, IOException e) {

    }

    @Override
    public void onSuccess(WeReq call, String data) {

    }
});

//返回其他类型,将不会进行JSON转换操作

//返回类型为Response,直接返回OkHttp的Response对象.这在框架不能满足的时候调用
WeHttp.<Response>post("").execute(Response.class);

//返回类型为String会直接将Response中的结果转换为字符串返回
WeHttp.<String>post("").execute(String.class);

JSON转换

内置了一个JSON转换的库,这个库基于Android的JsonObjectJsonArray,如果不希望依赖太多的第三方库,可以使用内置的JSON库,否则可以自定义JSON库,参考前面的示例代码.

public void testJson() {
    new WeJson().toJson(null);
    new WeJson().fromJson("", String.class);
}

上一篇: 已经是第一篇啦

下一篇: C 语言开发从零开始入门

立即登录,发表评论
没有帐号?立即注册 0 条评论