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. 手机APP软件使用说明

    手机APP软件使用说明 一.            POLYCOM客户端(视频会议终端)登录: 1. 打开手机,找到Polycom软件,点击打开. 2. 打开软件后,界面如下,每次开会时,由会议管理员 ...

  2. 1. windows下作为应用程序启动apache的方法

    1. 具体步骤如下:(文章末尾附加:Apache 2.2.17下载路径) 步骤一 :Cmd打开命令行窗口,切换到apache安装目录下 cd  C:\MAS\TRSMAS\win31\apache\b ...

  3. 【AsyncTask整理 1】 AsyncTask几点要注意的地方

    问题1:AsyncTask是多线程吗? 答:是. 问题2:AsyncTask与Handler相比,谁更轻量级? 答:通过看源码,发现AsyncTask实际上就是一个线程池,而网上的说法是AsyncTa ...

  4. 新手教程之使用Xib自定义UITableViewCell

    新手教程之使用Xib自定义UITableViewCell 前言 首先:什么是UITableView?看图 其次:什么是cell? 然后:为什么要自定cell,UITableView不是自带的有cell ...

  5. iOS 项目审核被拒原因汇总

    1.程序运行崩溃 Your app crashes on iPhone running iOS connected to an IPv6 network when we: - app crashes ...

  6. 20145102 Java 实验一

    20145102 Java 实验一 Java环境的安装 就像第一周写的一样,在linux下java的安装和配置简直简单的不行不行的,一个命令足以: sudo pacman -S jdk 配置什么的也就 ...

  7. [转]Web Services使用out参数

    本文转自:http://www.cnblogs.com/zhaozhan/archive/2010/10/25/1860837.html Web Services使用out参数,在SOAP协议中会跟返 ...

  8. C之文件读写

    1.fopen() fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能:为使用而打开一个流,把一个文件和此 ...

  9. MVC中的Routing

    Routing ASP.NET Routing模块的责任是将传入的浏览器请求映射为特有的MVC controller actions. public static void RegisterRoute ...

  10. php curl破解防盗链

    function get_content($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); $header = array( ...