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结构模型:

基本用法

基础请求

  1. LiteHttpClient client =LiteHttpClient.getInstance(context);
  2. Response res = client.execute(newRequest("http://baidu.com"));
  3. String html = res.getString();

异步请求

  1. HttpAsyncExcutor asyncExcutor =newHttpAsyncExcutor();
  2. asyncExcutor.execute(client,newRequest(url),newHttpResponseHandler(){
  3. @Override
  4. protectedvoid onSuccess(Response res,HttpStatus status,NameValuePair[] headers){
  5. // do some thing on UI thread
  6. }
  7. @Override
  8. protectedvoid onFailure(Response res,HttpException e){
  9. // do some thing on UI thread
  10. }
  11. });

Java Model 作为参数的请求

  1. // build a request url as : http://a.com?name=jame&id=18
  2. Man man =newMan("jame",18);
  3. Response resonse = client.execute(newRequest("http://a.com",man));

man class:

  1. publicclassManimplementsHttpParam{
  2. privateString name;
  3. privateint id;
  4. privateint age;
  5. publicMan(String name,int id){
  6. this.name = name;
  7. this.id= id;
  8. }
  9. }

全自动Json转化

  1. String url ="http://litesuits.github.io/mockdata/user?id=18";
  2. User user = client.get(url,null,User.class);

User Class :

  1. publicclassUserextendsApiResult{
  2. //全部声明public是因为写sample方便,不过这样性能也好,
  3. //即使private变量LiteHttp也能自动赋值,开发者可自行斟酌修饰符。
  4. publicUserInfo data;
  5. publicstaticclassUserInfo{
  6. publicString name;
  7. publicint age;
  8. publicArrayList<String> girl_friends;
  9. }
  10. }
  11. publicabstractclassApiResult{
  12. publicString api;
  13. publicString v;
  14. publicResult result;
  15. publicstaticclassResult{
  16. publicint code;
  17. publicString message;
  18. }
  19. }

User json structure:

  1. {
  2. "api":"com.xx.get.userinfo",
  3. "v":"1.0",
  4. "result":{
  5. "code":200,
  6. "message":"success"
  7. },
  8. "data":{
  9. "age":18,
  10. "name":"qingtianzhu",
  11. "girl_friends":[
  12. "xiaoli",
  13. "fengjie",
  14. "lucy"
  15. ]
  16. }
  17. }

多文件上传

  1. String url ="http://192.168.2.108:8080/LiteHttpServer/ReceiveFile";
  2. FileInputStream fis =newFileInputStream(newFile("sdcard/1.jpg"));
  3. Request req =newRequest(url);
  4. req.setMethod(HttpMethod.Post)
  5. .addParam("lite",newFile("sdcard/lite.jpg"),"image/jpeg")
  6. .addParam("feiq",newFile("sdcard/feiq.exe"),"application/octet-stream");
  7. if(fis !=null) req.addParam("meinv", fis,"sm.jpg","image/jpeg");
  8. Response res = client.execute(req);

文件和位图下载

    1. // one way
    2. File file = client.execute(imageUrl,newFileParser("sdcard/lite.jpg"),HttpMethod.Get);
    3. // other way
    4. Response res = client.execute(newRequest(imageUrl).setDataParser(newBitmapParser()));
    5. Bitmap bitmap = res.getBitmap();

下载地址:https://github.com/litesuits/android-lite-http

LiteHttp:一款‘智能’的HTTP框架类库的更多相关文章

  1. (读书笔记).NET大局观-.NET框架类库概观

    .NET框架类库概况 构建在.NET框架上所有的软件,都会用到通用语言进行时,即使基于最简单的CLR程序,也需要用到一部分.NET框架类库,更精致复杂的软件则使用这个类库提供的更多服务. .NET框架 ...

  2. 智能头盔 "Livall携全球首款智能骑行头盔亮相CES"

    LIVALL是全球首创集音乐.通讯.智能灯光为一体的智能骑行头盔的研发者,日前Livall携旗下智能骑行头盔BH 100和BH 60参展CES 2017,这也是目前世全球首款智能骑行头盔类产品,同时亮 ...

  3. atitit。ocr框架类库大全 attilax总结

    atitit.ocr框架类库大全 attilax总结 Tesseract Asprise JavaOCR 闲来无事,发现百度有一个OCR文字识别接口,感觉挺有意思的,拿来研究一下. 百度服务简介:文字 ...

  4. .Net框架与框架类库-转

    http://blog.csdn.net/rrrfff/article/details/6686493 .NET Framework 具有两个主要组件:公共语言运行库和 .NET Framework类 ...

  5. Go语言打造以太坊智能合约测试框架(level1)

    传送门: 柏链项目学院 Go语言打造以太坊智能合约测试框架 前言 这是什么? 这是一个基于go语言编写的,自动化测试以太坊智能合约的开发框架,使用此框架,可以自动化的部署合约,自动测试合约内的功能函数 ...

  6. visual studio单项目一次生成多框架类库、多框架项目合并

    目录 不同平台框架项目使用同一套代码,一次编译生成多个框架类库 需要先了解的东西 分析 添加PropertyGroup 多目标平台 编译符号和输出目录设置 添加依赖 代码文件处理 主副平台项目文件处理 ...

  7. Atitit xml框架类库选型 attilax总结

    Atitit xml框架类库选型 attilax总结 1. 1. XML类库可以分成2大类.标准的.这些类库通常接口和实现都是分开的1 2. Jdom 和dom4j1 2.1. 5.1. jdom1 ...

  8. atitit.提升研发管理的利器---重型框架 框架 类库的区别

    atitit.提升研发管理的利器---重型框架 框架 类库的区别 1. 重型框架就是it界的重武器. 1 2. 框架 VS. 库 可视化图形化 1 3. 应用框架 1 4. 类库 2 5. 框架是不可 ...

  9. 27款经典的CSS框架

    利用 CSS 框架,可以简化你的工作,提高工作效率.CSS 框架是一系列 CSS 文件的集合体,包含了基本的元素重置,页面排版.网格布局.表单样式.通用规则等代码块.下面给你推荐了27款优秀的CSS框 ...

随机推荐

  1. C小加 之 随机数

    描述ACM队的“C小加”同学想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(0<N≤100),对于其中重复的数字,只保留一个,把其余相 ...

  2. Balloon Comes!

    Problem Description The contest starts now! How excited it is to see balloons floating around. You, ...

  3. Java基础知识强化之IO流笔记82:NIO之 Pipe(管道)

    1. Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 这里是Pipe原理的图示: 2. Pip ...

  4. Zend Studio 上 安装使用Aptana插件(html,css,js代码提示功能) .

    最近装了zend studio 9.0 用了段时间发现写html,css,js代码没提示,要开dreamwaver(对js代码提示也不好).就网上搜索了下,发现了Aptana插件,装上用了下,感觉不错 ...

  5. mysql-完整性约束条件

    PRIMARY :   主键 AUTO_INCREMENT  : 自增长 FOREIGN KEY : 外键 NOT NULL : 非空 UNIQUE KEY : 唯一 DEFAULT :  默认值 主 ...

  6. SqlServer之代码块相关

    原创文章,转载必需注明出处:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/sqlserver-codeblock/ 一.go语句 ...

  7. 转: 数字证书原理 https 完整过程解析

    点评: 讲的非常的详细与全面,值得一看. 转: http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html 文中首先解释了加密解 ...

  8. oracle查看允许的最大连接数和当前连接数等信息

    目前总结的语句,在查看数据的连接情况很有用 ,写完程序一边测试代码一边查看数据库连接的释放情况有助于分析优化出一个健壮的系统程序来. 1.Sql代码1.select count(*) from v$p ...

  9. [转]移动App测试中的最佳做法

    Daniel Knott 用过各种不同编程语言和软件质量保证工具.他在软件开发和测试方面干了七年,自2010年起,他一直在德国汉堡的XING AG公司就职,几个项目里,比如XING调查和XING建议, ...

  10. 使用Gmail发送邮件心得

    /// <summary> /// 发送邮件 /// </summary> /// <returns></returns> public static ...