• 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来完成异步,推荐使用更强大、高效的专业并发库

    架构图

    一个良好的项目结构:

    App Architecture

    • 底层是业务无关的框架库,用之四海而皆准。
    • 中层是针对业务的三方库,以及主要逻辑实现,全部业务都在这里。
    • 上层是Activity、Fragment、Views&Widget等视图渲染和业务调用。 
      这样一个结构,使得你的代码快速在phone和pad以及tv之间迁移,且让你整个更为清晰。那么LiteHttp就位于这个结构的底层。

    LiteHttp结构模型:

    LiteHttp Architecture

    基本用法

    基础请求

    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

  • 相关阅读:
    Word批量转PDF或者图片
    sqlite3数据c/c++接口编程<linux,window>
    静态库和动态库
    QT信号和槽
    C程序编译过程
    Volatile关键字
    端口复用setsockopt
    深入理解epoll(转载)
    临时变量
    json学习随笔
  • 原文地址:https://www.cnblogs.com/youngforlife/p/3651353.html
Copyright © 2020-2023  润新知