NoHttp框架

NoHttp框架

框架简介

开源地址https://github.com/yanzhenjie/NoHttp

  • NoHttp实现了Http1.1(RFC2616),一个标准的Http框架。
  • 请求和下载都是队列,平均分配每个线程的资源,支持多个请求并发。
  • 支持GET、POST、PUT、PATCH、HEAD、DELETE、OPTIONS、TRACE等请求协议。
  • 支持基于POST、PUT、PATCH、DELETE的文件上传(Html表单原理)。
  • 文件下载、上传下载、上传和下载的进度回调、错误回调。
  • 提供了五种数据缓存策略供开发者选择使用(详细看下文)。
  • 支持取消某个请求、取消指定多个请求、取消所有请求。
  • 支持自定义Request,利用NoHttp泛型可以解析成你想要的任何数据格式(String、Json、JavaBean等)。
  • 支持Session、Cookie的自动维持,App重启、关开机后还持续维持。
  • 支持Https、自签名网站Https的访问、支持双向验证。

使用前配置

项目倒入

  1. compile ‘com.yolanda.nohttp:nohttp:1.0.5‘

需要的权限

  1. <uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/>
  2. <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  3. <uses-permissionandroid:name="android.permission.INTERNET"/>
  4. <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
  5. <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>

初始化

  1. @Override
  2. publicvoid onCreate(){
  3. super.onCreate();
  4. // 初始化NoHttp
  5. NoHttp.init(this);
  6. // 开启调试模式
  7. Logger.setDebug(true);
  8. Logger.setTag("NoHttpSample");
  9. }

使用详解

使用详情可参考官方文档 http://api.nohttp.net/

Demo示例

  • 封装结果回调对象OnResponseListener
    NoHttp的接受结果是用OnResponseListener接口回调,为了方便使用,对它进行做简单封装,请求开始时显示dialog, 请求完成时关闭这个dialog:
  1. publicclassHttpResponseListener<T>implementsOnResponseListener<T>{
  2. /**
  3. * Dialog
  4. */
  5. privateWaitDialog mWaitDialog;
  6. /**
  7. * 当前请求
  8. */
  9. privateRequest<T> mRequest;
  10. /**
  11. * 结果回调
  12. */
  13. privateHttpListener<T> callback;
  14. /**
  15. * 是否显示dialog
  16. */
  17. privateActivity context;
  18. /**
  19. * @param context context用来实例化dialog
  20. * @param request 请求对象
  21. * @param httpCallback 回调对象
  22. * @param canCancel 是否允许用户取消请求
  23. * @param isLoading 是否显示dialog
  24. */
  25. publicHttpResponseListener(Activity context,Request<T> request,HttpListener<T> httpCallback,boolean canCancel,boolean isLoading){
  26. this.context = context;
  27. this.mRequest = request;
  28. if(isLoading){// 需要显示dialog
  29. mWaitDialog =newWaitDialog(context);
  30. mWaitDialog.setCancelable(canCancel);
  31. mWaitDialog.setOnCancelListener(newDialogInterface.OnCancelListener(){
  32. @Override
  33. publicvoid onCancel(DialogInterface dialog){
  34. mRequest.cancel();// dialog被用户关闭时, 取消当前请求
  35. }
  36. });
  37. }
  38. this.callback = httpCallback;
  39. this.isLoading = isLoading;
  40. }
  41. /**
  42. * 开始请求, 这里显示一个dialog
  43. */
  44. @Override
  45. publicvoid onStart(int what){
  46. if(!context.isFinishing && mWaitDialog !=null&&!mWaitDialog.isShowing())
  47. mWaitDialog.show();
  48. }
  49. /**
  50. * 结束请求, 这里关闭dialog
  51. */
  52. @Override
  53. publicvoid onFinish(int what){
  54. if(mWaitDialog !=null&& mWaitDialog.isShowing())
  55. mWaitDialog.dismiss();
  56. }
  57. /**
  58. * 成功回调
  59. */
  60. @Override
  61. publicvoid onSucceed(int what,Response<T> response){
  62. if(callback !=null)
  63. callback.onSucceed(what, response);
  64. }
  65. /**
  66. * 失败回调
  67. */
  68. @Override
  69. publicvoid onFailed(int what,Response<T> response){
  70. if(callback !=null)
  71. callback.onFailed(what, response);
  72. }
  73. }
  • 定义HttpListener接口, 接受请求结果
  1. publicinterfaceHttpListener<T>{
  2. /**
  3. * 请求失败
  4. */
  5. void onSucceed(int what,Response<T> response);
  6. /**
  7. * 请求成功
  8. */
  9. void onFailed(int what,Response<T> response);
  10. }
  • 封装请求入口, 单例模式

看到这里有人可能开始有点迷惑了,不是需要OnResponseListener对象嘛,现在HttpListener怎么用啊?可观别急,我们继续看下面请求入口的封装。
因为NoHttp是队列的请求方式,方便开发者控制并发和线程数量,而NoHttp生成队列都是newInstance,每次都是一个新的队列对象,所以生成的Queue都需要做单列,请看:

  1. publicclassCallServer{
  2. privatestaticCallServer callServer;
  3. /**
  4. * 请求队列
  5. */
  6. privateRequestQueue requestQueue;
  7. privateCallServer(){
  8. requestQueue =NoHttp.newRequestQueue();
  9. }
  10. /**
  11. * 请求队列
  12. */
  13. publicsynchronizedstaticCallServer getRequestInstance(){
  14. if(callServer ==null)
  15. callServer =newCallServer();
  16. return callServer;
  17. }
  18. /**
  19. * 添加一个请求到请求队列
  20. *
  21. * @param context context用来实例化dialog
  22. * @param what 用来标志请求,在回调方法中会返回这个what,类似handler的what
  23. * @param request 请求对象
  24. * @param callback 结果回调对象
  25. * @param canCancel 是否允许用户取消请求
  26. * @param isLoading 是否显示dialog
  27. */
  28. public<T>void add(Context context,int what,Request<T> request,HttpListener<T> callback,boolean canCancel,boolean isLoading){
  29. requestQueue.add(what, request,newHttpResponseListener<T>(context, request, callback, canCancel, isLoading));
  30. }
  31. /**
  32. * 取消这个sign标记的所有请求
  33. */
  34. publicvoid cancelBySign(Object sign){
  35. requestQueue.cancelBySign(sign);
  36. }
  37. /**
  38. * 取消队列中所有请求
  39. */
  40. publicvoid cancelAll(){
  41. requestQueue.cancelAll();
  42. }
  43. /**
  44. * 退出app时停止所有请求
  45. */
  46. publicvoid stopAll(){
  47. requestQueue.stop();
  48. }
  49. }
  • 如何使用
  1. /**
  2. * 发起请求
  3. */
  4. privatevoid requestString(){
  5. Request<String> request =NoHttp.createStringRequest(Constants.URL_NOHTTP_CACHE_STRING);
  6. CallServer.getRequestInstance().add(this,0, request, httpListener,false,true);
  7. }
  8. /**
  9. * 接受响应
  10. */
  11. privateHttpListener<String> httpListener =newHttpListener<String>(){
  12. @Override
  13. publicvoid onSucceed(int what,Response<String> response){
  14. // 拿到请求结果
  15. String result = response.get();
  16. ...
  17. }
  18. @Override
  19. publicvoid onFailed(int what,Response<String> response){
  20. Toast.show("请求失败");
  21. }
  22. };

来自为知笔记(Wiz)

时间: 2024-12-18 00:51:14

NoHttp框架的相关文章

NoHttp和OkHttp的无缝结合 NoHttp框架作者带你看源码(二)

NoHttp和OkHttp的无缝结合 NoHttp框架作者带你看源码(二) 版权声明:转载必须注明本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003 上一次带大家分析了NoHttp源码,知道我们可以替换NoHttp的底层为其他任何库,例如OkHttp.HttpURLConnection.HttpClient,那今天就带领大家一步步来实现替换NoHttp的底层为OkHttp. NoHttp源码分析的博客:http://blog.csdn.net/yanz

Android NoHttp 框架作者带你看源码(一)

版权声明:转载必须注明本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003 现在市场的Http框架很多,比如我们熟知的NoHttp.Retrofit.Volley.android-async-http等上层框架,HttpURLConnection.OkHttp.HttpClient等底层框架,今天不说孰好孰坏,今天我带大家来分析NoHttp的源码,教大家如何来看NoHttp的源码. 今天我们由浅到深,深入浅出的分析第一个模块:请求模块. 支持作者可以去G

Python爬取CSDN博客文章

之前解析出问题,刚刚看到,这次仔细审查了 0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.windows下环境搭建 3.java里连接redis数据库 4.关于认证 5.redis高级功能总结1.基础底层数据结构1.1.简单动态字符串SDS定义: ...47分钟前1 url :http://blog.csdn.net/youyou1543724847/

框架--NoHttp和OkHttp哪个好用,Volley和NoHttp哪个好用?

NoHttp和OkHttp哪个好用,Volley和NoHttp哪个好用? NoHttp 源码及Demo托管在Github欢迎大家Star: https://github.com/Y0LANDA/NoHttp NoHttp是专门做Android网络请求与下载的框架,框架直播视频源码下载地址. 开这篇博客也是不得已,NoHttp和OkHttp哪个好用?Volley和OkHttp哪个好用?NoHttp和Volley哪个好用?随着NoHttp的崛起,问这个问题的人是越来越多了,所以干脆来开一篇博客了.

NoHttp封装--07 自定义异步任务框架

MainActivity: 1 public class MainActivity extends Activity implements View.OnClickListener { 2 3 .... 4 5 @Override 6 public void onClick(View v) { 7 MultiAsynctaskNetwork network = new MultiAsynctaskNetwork(networkInterface); 8 network.execute(); 9

简单说说NoHTTP

学习NoHttp的原因是由于公司之前做的产品使用的网络请求框架一直都是Volley(为什么使用Volley就不用多说了,最起码是谷歌开发团队自己搞的,总感觉权威一些),可是自从android6.0推出以后,Volley的使用开始有点动摇了.因为android6.0删除了HttpClient相关的API,我们知道的一般网络请求使用的API是HttpClient和URLConnection,而Volley就是基于HttpClient,虽然android2.3后2.3Volley可以解析URLConn

框架模式MVC与MVP在Android中的应用

很多人在开发Android项目时没有考虑过架构模式的问题,以至于随着项目的增大,Activty或者Fragment中代码也会越来越多,导致项目的维护变的越来越复杂.然而在Android中使用比较多的两种框架模式就是MVC和MVP,下面我将分别介绍一下这两种框架模式. 一.MVC框架模式 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑

是时候用 NoHttp 来替换 Volley 了

NoHttp一个有情怀的框架 我们日常生活中常用的App,包括我们开发者平常的开发中,有90%以上的App都用了Http来和服务器做交互.随着Android6.0开始AndroidSDK中删除了HttpClient的相关的API,我们有必要选择一个可以兼容高低版本系统的Http框架,Google的官方文档中推荐我们使用HttpURLConnection,但是鉴于HttpURLConnection的API过于简单,并且在高低版本系统中有不同的bug,因此开发者如果使用HttpURLConnecti

基于jquery开发的UI框架整理分析

根据调查得知,现在市场中的UI框架差不多40个左右,不知大家都习惯性的用哪个框架,现在市场中有几款UI框架稍微的成熟一些,也是大家比较喜欢的一种UI框架,那应该是jQuery,有部分UI框架都是根据jQuery研发出来的产品,现在也很常见了. 国产jQuery UI框架 (jUI) DWZ DWZ富客户端框架(jQuery RIA framework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架.设计目标是简单实用,快速开发,降低ajax开发成本. jQuery 部件布局