文档章节

迄今最好的Http请求框架

爱看博客
 爱看博客
发布于 2015/10/22 10:02
字数 891
阅读 27
收藏 0

码上生花,ECharts 作品展示赛正式启动!>>>

本文原创,转载请注明链接http://blog.kymjs.com/
KJFrameForAndroid下载地址:https://github.com/kymjs/KJFrameForAndroid

基础功能

KJHttp是专为解决Android中Http通信而产生的,它在请求和响应层面做到了全自动构建和解析,主要用于Android快速开发。
KJHttp自带了数据缓存功能,你所访问的Http数据都将在本地建立一个缓存,默认的缓存时间是5分钟,也就是5分钟以内相同的请求都不会经过网络,而是从本地缓存中直接读取。当然对于及时性要求较高的新闻类应用,你也可以关闭这个特性或者只需要将缓存时间设置成0就行了~
KJHttp支持JSON格式参数提交、AJAX方式的Form表单参数提交,文件与图片的上传下载,同时支持根据你的需求所发起的自定义Request。

工作原理

整个KJHttp工作流程:采用责任链设计模式,由三部分组成,类似设计可以类比Handle…Looper…MessageQueue
1. KJHttp负责不停向NetworkQueue(或CacheQueue实际还是NetworkQueue, 具体逻辑请查看 {@link CacheDispatcher})添加Request
2. 另一边由TaskThread不停从NetworkQueue中取Request并交给Network执行器(逻辑请查看 {@link NetworkDispatcher} ),
3. Network执行器将执行成功的NetworkResponse返回给TaskThead,并通过Request的定制方法 {@link Request#parseNetworkResponse()}封装成Response,最终交给分发器 {@link Delivery} 分发到主线程并调用HttpCallback相应的方法

基础用法

get或post以JSON传参的方式请求数据示例

 /** * 使用JSON提交参数而不是Form表单 */
  private void jsonRequest() {
      KJHttp kjh = new KJHttp();
      HttpParams params = new HttpParams();
      params.putHeaders("Cookie", "cookie不能告诉你");

      //这里传递json字符串,(JSONObject可以调用toString方法转换)
      params.putJsonParams(jsonObj.toString());
      kjh.jsonPost(
              "http://www.oschina.net/action/api/team_stickynote_batch_update",
              params, new HttpCallBack() {
                  @Override
                  public void onSuccess(String t) {
                      super.onSuccess(t);
                      toast(t);
                  }
              });
  }

get或post以AJAX方式请求JSON数据示例

  KJHttp kjh = new KJHttp();
  HttpParams params = new HttpParams(); 
  params.put("id", "1"); //传递参数
  params.put("name", "kymjs");
  //HttpCallback中有很多方法,可以根据需求选择实现
  kjh.post("http://192.168.1.149/post_api", params, new HttpCallBack() {

      @Override
      public void onSuccess(String t) {
          super.onSuccess(t);
          ViewInject.longToast("请求成功");
          KJLoger.debug("log:" + t.toString());
      }

      // ......
      //还有更多,就不一一介绍了,大家可以参考API文档
      // ......
  });

文件上传支持多文件上传,支持传file对象,byte[]两种

  private void upload() {
      HttpParams params = new HttpParams();
      //可多次put,支持多文件上传
      params.put("file", FileUtils.getSaveFile("KJLibrary", "logo.jpg"));
      kjh.post("http://192.168.1.149/kymjs/hello.php", params,
              new HttpCallBack() {
                  @Override
                  public void onSuccess(String t) {
                      super.onSuccess(t);
                      ViewInject.toast("success");
                  }

                  @Override
                  public void onFailure(Throwable t, int errorNo,
                          String strMsg) {
                      super.onFailure(t, errorNo, strMsg);
                      ViewInject.toast("error" + strMsg);
                  }
                  /** 还有更多实现... **/
              });
  }

文件下载与断点续传

 kjh.download("http://www.kymjs.com/app/kjblog.apk", "file.apk",new HttpCallBack() {
        @Override
        public void onSuccess(File f) {
            super.onSuccess(f);
            KJLoger.debug("success");
            ViewInject.toast("toast");
            mProgress.setProgress(mProgress.getMax());
        }

        @Override
        public void onFailure(Throwable t, int errorNo,String strMsg) {
            super.onFailure(t, errorNo, strMsg);
            KJLoger.debug("onFailure");
        }

        /* onLoading 方法就只在文件下载时才会被回调 */
        @Override
        public void onLoading(long count, long current) {
            super.onLoading(count, current);
            mProgress.setMax((int) count);
            mProgress.setProgress((int) current);
            KJLoger.debug(count + "------" + current);
        }
    });

更多可配置方法

KJHttp kjh = new KJHttp();
//取消一个请求
kjh.cancle(url);

//读取一个本地缓存数据
kjh.getCache(url);

//删除一个本地缓存
kjh.removeCache(url);

高级设置

以上是基础用法,同样也支持自定义设置,你可以自定义数据缓存的方式,请求的优先级,请求数据的有效时间。同时支持根据你的需求所发起的自定义Request。
更多的使用,可以参考实际项目中的使用爱看博客客户端

版权声明:本文原创,转载请注明来自 http://kymjs.com/

本文转载自:http://blog.csdn.net/kymjs/article/details/45716797

爱看博客
粉丝 5
博文 103
码字总数 23887
作品 0
深圳
私信 提问
加载中
请先登录后再评论。

暂无文章

自媒体文章原创度检测,可以试一下蚁小二工具

自媒体文章原创度检测,可以试一下蚁小二工具,现在的自媒体人对文章原创度检测这一块还是挺看重的,因为文章的原创度不仅仅和推荐量有关还和质量分值有关,这个时候就可以用到蚁小二工具。 ...

一键分发工具-蚁小二
21分钟前
15
0
Cannot import Sklearn from sklearn.externals.joblib

使用: from sklearn.externals import joblib 报错:Cannot import Sklearn from sklearn.externals.joblib 解决方法: python -m pip install sklearn --upgrade python -m pip install jobli......

hc321
21分钟前
18
0
编程语言那么多,为何建议学习python呢?

  随着互联网技术的发展,大家对于编程的认识越来越系统化了,现在学习编程的年龄越来越小,而编程也成为了我们学习的重要知识。   当然,学习编程知识不分早晚的,也有很多26岁左右才转...

osc_ix000whh
22分钟前
7
0
kubectl的使用

https://kubernetes.io/docs/reference/kubectl/overview/

osc_n1fa9m3z
23分钟前
20
0
2020上海锁博会

上海锁博会将于2020年12月22日至24日在上海新国际博览中心举办“第六届上海国际锁博会”,上海锁博会本来就致力于展现中国作为亚洲最活跃、最具发展潜力的锁具市场之一的独特魅力。 锁博会坚...

osc_uvparld2
25分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部