文档章节

迄今最好的Http请求框架

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

本文原创,转载请注明链接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
深圳

暂无相关文章

Nginx服务架构初探(四):nginx服务器的rewrite功能

nginx服务器的rewrite功能 1.nginx后端服务器组的配置 1>upstream name {…} name是给服务器组限的组名 2>server address [parameters]; address为服务器地址 parame......

余温灬未存 ⋅ 今天 ⋅ 0

layer.prompt使文本框为空的情况下也能点击确定

最近一直在使用layui,但是用到弹出层layer.prompt时,如果文本框是空的话点击确定没有反应,不能向下执行。 但是我又需要空值,看看我原来的代码。 123456789 layer.prompt...

孟飞阳 ⋅ 今天 ⋅ 0

Linux普通文件压缩工具gzip、Bzip2、xz

第六章 文件压缩和打包 6.1 压缩打包介绍 Linux环境常见压缩文件类型: .zip,.gz,.bz2,.xz, .tar.gz,.tar.bz2,.tar.xz 压缩打包的目的 方便文件传输 节省磁盘空间 减少传输花费的时间 ...

弓正 ⋅ 今天 ⋅ 0

移动弹窗基础知识浅析——IOS弹窗体系

摘要: 最为常见的【弹窗】反而是最“捉摸不定”的东西。各种类型的弹窗傻傻分不清楚,不知道在什么场景下应该用哪种弹窗。尤其是遇到“二次确认”等场景…… 因此,打算从头整理移动弹窗的基...

阿里云云栖社区 ⋅ 今天 ⋅ 0

zabbix短信报警统计以及报表展示

一、需求 由于我们的业务报警比较频繁,之前是针对每个报警进行具体处理,但是有时还会重复出现,或者后续处理有时忘记跟进等,因此进行报警短信的统计,可以针对一些问题与业务跟进,明确后...

o翡翠谷o ⋅ 今天 ⋅ 0

JNI 输出LOG

1、导入log头文件。在你使用的 .c/ .cpp 文件中,导入 log.h 头文件。 #include<android/log.h> 2、在android.mk 加上 LOCAL_LDLIBS := -llog 或 LOCAL_SHARED_LIBRARIES := liblog 3、定义L......

国仔饼 ⋅ 今天 ⋅ 0

主线程pthread_exit 作用

#include <iostream>#include <pthread.h>#include <unistd.h>using namespace std;#define NUM_THREADS 10void* say_hello(void* args){ int i = *((int*)args);/......

xxdd ⋅ 今天 ⋅ 0

崛起于Springboot2.X之Mybatis-xml方式操作mysql数据库(3)

序言:当第一篇讲道Mybatis的时候,只要使用过mybatis的java程序员100%都会知道这种方式,因为这是最广泛最全面的编写sql操作mysql数据库的方式,高级sql的编写往往通过xml方式,接下来进入正...

木九天 ⋅ 今天 ⋅ 2

移动弹窗基础知识浅析——IOS弹窗体系

摘要: 最为常见的【弹窗】反而是最“捉摸不定”的东西。各种类型的弹窗傻傻分不清楚,不知道在什么场景下应该用哪种弹窗。尤其是遇到“二次确认”等场景…… 因此,打算从头整理移动弹窗的基...

猫耳m ⋅ 今天 ⋅ 0

spring elasticsearch 2.4 date 日期

1.mappingPUT user_behavior { "mappings": { "user_behavior": { "properties": { "date": { "type": "createDate", ......

xiaomin0322 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部