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# 之 读写文件

    1.使用 FileStream 读写文件 添加命名空间引用: using System; using System.Collections.Generic; using System.Text; us ...

  2. Python操作MySQL之SQLAlchemy

      SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结 ...

  3. FileListEntityProcessor

    一个简单的实体处理程序,可以用于枚举标准文件系统中的文件列表,它不需要使用DataSource.属性如下: fileName:(必填) 用正则表达式来标记文件名 baseDir:(必填) 基础目录,绝 ...

  4. 11. Android框架和工具之 Logger(调试代码)

    1. Logger Logger是android是一个简单.漂亮.功能强大的Android日志程序. 日志程序提供了 : 线程信息Thread information 类信息Class informa ...

  5. IIS与JIRA的反向代理配置

    JIRA配置修改 JIRA与IIS ARR的集成,除了上篇(Visual SVN IIS反向代理设置)中讲到的基本的ARR配置之外,还需要在JIRA安装目录的conf\server.xml文件中做一个 ...

  6. 通过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 ...

  7. html 中根据后台参数显示 相应的样式 EL表达式

    <li><a class="${return_product_statu==-1||return_product_statu==null?'switch_xz':'none ...

  8. linux和Windows下文本格式转换

    1.安装转换工具:sudo apt-get install tofrodos 2.开始转换:fromdos grade.sh

  9. nodejs6-npm包管理工具

    npm search:在官方仓库中搜索包https://registry.npmjs.org npm view:查看官方仓库中的包 npm install:在当前目录下安装指定包 npm instal ...

  10. 详细js中(function(window,document,undefined))的作用

    在jquery插件中我们经常看到以下这段代码 对于很多初学者来说很难明白这表示什么,下边我将为大家介绍其相应的作用. 1.代码最前面的分号,可以防止多个文件压缩合并以为其他文件最后一行语句没加分号,而 ...