关闭
Hit
enter
to search or
ESC
to close
May I Suggest ?
#leanote #leanote blog #code #hello world
Leo's Blog
Home
Archives
Tags
Search
RxJava
About Me
WeHttp:一个基于OkHttp的面向Android开发的网络库封装
无
386
1
0
leoray
# WeHttp 简介 一个基于OkHttp3的面向Android开发的网络库封装,另外包含了一个简易的JSON转换库. GitHub地址: https://github.com/leishengwei/WeHttp 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的`JsonObject`和`JsonArray`,如果不希望依赖太多的第三方库,可以使用内置的JSON库,否则可以自定义JSON库,参考前面的示例代码. ``` public void testJson() { new WeJson().toJson(null); new WeJson().fromJson("", String.class); } ``` 内置WeJson对对象的要求如下: 1. 最好是标准的POJO对象,即私有变量加get和set方法, 2. 必须有一个无参构造方法(包括嵌套的POJO类也需要):Java中如果没有定义过其他构造函数,默认是有一个无参构造方法的 3. 成员变量支持List,Map,数组,也支持public的成员变量(不需要get和set,但是不推荐) 4. 如果是泛型类型,需要实现一个子类,比如`Resp<User>`需要实现一个`UserResp`继承该类来确定泛型类型
觉得不错,点个赞?
提交评论
Sign in
to leave a comment.
No Leanote account ?
Sign up now
.
0
条评论
More...
文章目录
No Leanote account ? Sign up now.