LiteHttp:一款‘智能’的HTTP框架类库
LiteHttp:一款‘智能’的HTTP框架类库(转自github)
简介
LiteHttp是一款简单、智能、灵活的HTTP框架库,它在请求和响应层面做到了全自动构建和解析,主要用于Android快速开发。借助LiteHttp你只需要一行代码即可完美实现http连接,它全面支持GET, POST, PUT, DELETE, HEAD, TRACE, OPTIONS 和 PATCH八种基本类型。LiteHttp能将Java Model转化为http请求参数,也能将响应的json语句智能转化为Java Model,这种全自动解析策略将节省你大量的构建请求、解析响应的时间。并且,你能自己继承重新实现Dataparser这个抽象类并设置给Request,来将http原始的inputstream转化为任何你想要的东西。
功能
- 单线程,所有方法都基于一个线程,绝不会跨线程,多线程的事情交给它自带的AsyncExecutor 或者更专业的框架库来解决。
- 灵活的架构,你可以轻松的替换Json自动化库、参数构建方式甚至默认的apache http client连接方式。
- 轻量级,微小的的开销,core jar包仅约86kb。
- 多种请求类型全面支持:get, post, head, put, delete, trace, options, patch.
- 多文件上传,不需要额外的类库支持。
- 内置的Dataparser支持文件和位图下载,你也可以自由的扩展DataParser来把原始的http inputstream转化为你想要的东西。
- 基于json的全自动对象转化: 框架帮你完成Java Object Model 和 Http Parameter之间的转化,完成Http Response与Java Object Model的转化。
- 自动重定向,基于一定的次数,不会造成死循环。
- 自动gizp压缩,帮你完成request编码和response解码以使http连接更加快速.
- 通过网络探测完成智能重试 ,对复杂的、信号不良的的移动网络做特殊的优化。
- 禁用一种或多种网络, 比如2G,3G。
- 简明且统一的异常处理体系:清晰、准确的抛出客户端、网络、服务器三种异常。
- 内置的AsyncExecutor可以让你轻松实现异步和并发的http请求,如果你喜欢,随意使用你自己的AsyncTask或Thread来完成异步,推荐使用更强大、高效的专业并发库。
架构图
一个良好的项目结构:
- 底层是业务无关的框架库,用之四海而皆准。
- 中层是针对业务的三方库,以及主要逻辑实现,全部业务都在这里。
- 上层是Activity、Fragment、Views&Widget等视图渲染和业务调用。
这样一个结构,使得你的代码快速在phone和pad以及tv之间迁移,且让你整个更为清晰。那么LiteHttp就位于这个结构的底层。
LiteHttp结构模型:
基本用法
基础请求
LiteHttpClient client =LiteHttpClient.getInstance(context);
Response res = client.execute(newRequest("http://baidu.com"));
String html = res.getString();
异步请求
HttpAsyncExcutor asyncExcutor =newHttpAsyncExcutor();
asyncExcutor.execute(client,newRequest(url),newHttpResponseHandler(){
@Override
protectedvoid onSuccess(Response res,HttpStatus status,NameValuePair[] headers){
// do some thing on UI thread
}
@Override
protectedvoid onFailure(Response res,HttpException e){
// do some thing on UI thread
}
});
Java Model 作为参数的请求
// build a request url as : http://a.com?name=jame&id=18
Man man =newMan("jame",18);
Response resonse = client.execute(newRequest("http://a.com",man));
man class:
publicclassManimplementsHttpParam{
privateString name;
privateint id;
privateint age;
publicMan(String name,int id){
this.name = name;
this.id= id;
}
}
全自动Json转化
String url ="http://litesuits.github.io/mockdata/user?id=18";
User user = client.get(url,null,User.class);
User Class :
publicclassUserextendsApiResult{
//全部声明public是因为写sample方便,不过这样性能也好,
//即使private变量LiteHttp也能自动赋值,开发者可自行斟酌修饰符。
publicUserInfo data;
publicstaticclassUserInfo{
publicString name;
publicint age;
publicArrayList<String> girl_friends;
}
}
publicabstractclassApiResult{
publicString api;
publicString v;
publicResult result;
publicstaticclassResult{
publicint code;
publicString message;
}
}
User json structure:
{
"api":"com.xx.get.userinfo",
"v":"1.0",
"result":{
"code":200,
"message":"success"
},
"data":{
"age":18,
"name":"qingtianzhu",
"girl_friends":[
"xiaoli",
"fengjie",
"lucy"
]
}
}
多文件上传
String url ="http://192.168.2.108:8080/LiteHttpServer/ReceiveFile";
FileInputStream fis =newFileInputStream(newFile("sdcard/1.jpg"));
Request req =newRequest(url);
req.setMethod(HttpMethod.Post)
.addParam("lite",newFile("sdcard/lite.jpg"),"image/jpeg")
.addParam("feiq",newFile("sdcard/feiq.exe"),"application/octet-stream");
if(fis !=null) req.addParam("meinv", fis,"sm.jpg","image/jpeg");
Response res = client.execute(req);
文件和位图下载
// one way
File file = client.execute(imageUrl,newFileParser("sdcard/lite.jpg"),HttpMethod.Get);
// other way
Response res = client.execute(newRequest(imageUrl).setDataParser(newBitmapParser()));
Bitmap bitmap = res.getBitmap();
下载地址:https://github.com/litesuits/android-lite-http
LiteHttp:一款‘智能’的HTTP框架类库的更多相关文章
- (读书笔记).NET大局观-.NET框架类库概观
.NET框架类库概况 构建在.NET框架上所有的软件,都会用到通用语言进行时,即使基于最简单的CLR程序,也需要用到一部分.NET框架类库,更精致复杂的软件则使用这个类库提供的更多服务. .NET框架 ...
- 智能头盔 "Livall携全球首款智能骑行头盔亮相CES"
LIVALL是全球首创集音乐.通讯.智能灯光为一体的智能骑行头盔的研发者,日前Livall携旗下智能骑行头盔BH 100和BH 60参展CES 2017,这也是目前世全球首款智能骑行头盔类产品,同时亮 ...
- atitit。ocr框架类库大全 attilax总结
atitit.ocr框架类库大全 attilax总结 Tesseract Asprise JavaOCR 闲来无事,发现百度有一个OCR文字识别接口,感觉挺有意思的,拿来研究一下. 百度服务简介:文字 ...
- .Net框架与框架类库-转
http://blog.csdn.net/rrrfff/article/details/6686493 .NET Framework 具有两个主要组件:公共语言运行库和 .NET Framework类 ...
- Go语言打造以太坊智能合约测试框架(level1)
传送门: 柏链项目学院 Go语言打造以太坊智能合约测试框架 前言 这是什么? 这是一个基于go语言编写的,自动化测试以太坊智能合约的开发框架,使用此框架,可以自动化的部署合约,自动测试合约内的功能函数 ...
- visual studio单项目一次生成多框架类库、多框架项目合并
目录 不同平台框架项目使用同一套代码,一次编译生成多个框架类库 需要先了解的东西 分析 添加PropertyGroup 多目标平台 编译符号和输出目录设置 添加依赖 代码文件处理 主副平台项目文件处理 ...
- Atitit xml框架类库选型 attilax总结
Atitit xml框架类库选型 attilax总结 1. 1. XML类库可以分成2大类.标准的.这些类库通常接口和实现都是分开的1 2. Jdom 和dom4j1 2.1. 5.1. jdom1 ...
- atitit.提升研发管理的利器---重型框架 框架 类库的区别
atitit.提升研发管理的利器---重型框架 框架 类库的区别 1. 重型框架就是it界的重武器. 1 2. 框架 VS. 库 可视化图形化 1 3. 应用框架 1 4. 类库 2 5. 框架是不可 ...
- 27款经典的CSS框架
利用 CSS 框架,可以简化你的工作,提高工作效率.CSS 框架是一系列 CSS 文件的集合体,包含了基本的元素重置,页面排版.网格布局.表单样式.通用规则等代码块.下面给你推荐了27款优秀的CSS框 ...
随机推荐
- C# 之 读写文件
1.使用 FileStream 读写文件 添加命名空间引用: using System; using System.Collections.Generic; using System.Text; us ...
- Python操作MySQL之SQLAlchemy
SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结 ...
- FileListEntityProcessor
一个简单的实体处理程序,可以用于枚举标准文件系统中的文件列表,它不需要使用DataSource.属性如下: fileName:(必填) 用正则表达式来标记文件名 baseDir:(必填) 基础目录,绝 ...
- 11. Android框架和工具之 Logger(调试代码)
1. Logger Logger是android是一个简单.漂亮.功能强大的Android日志程序. 日志程序提供了 : 线程信息Thread information 类信息Class informa ...
- IIS与JIRA的反向代理配置
JIRA配置修改 JIRA与IIS ARR的集成,除了上篇(Visual SVN IIS反向代理设置)中讲到的基本的ARR配置之外,还需要在JIRA安装目录的conf\server.xml文件中做一个 ...
- 通过maven添加quartz
pom.xml中相关dependency信息 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <depen ...
- html 中根据后台参数显示 相应的样式 EL表达式
<li><a class="${return_product_statu==-1||return_product_statu==null?'switch_xz':'none ...
- linux和Windows下文本格式转换
1.安装转换工具:sudo apt-get install tofrodos 2.开始转换:fromdos grade.sh
- nodejs6-npm包管理工具
npm search:在官方仓库中搜索包https://registry.npmjs.org npm view:查看官方仓库中的包 npm install:在当前目录下安装指定包 npm instal ...
- 详细js中(function(window,document,undefined))的作用
在jquery插件中我们经常看到以下这段代码 对于很多初学者来说很难明白这表示什么,下边我将为大家介绍其相应的作用. 1.代码最前面的分号,可以防止多个文件压缩合并以为其他文件最后一行语句没加分号,而 ...