zoukankan      html  css  js  c++  java
  • KJHttp框架使用讲解

    摘要

    本文原创,转载请注明地址:http://kymjs.com/code/2015/05/12/01
    写给那些在用、想用、还没有用过KJFrame的朋友。 KJFrameForAndroid总共分为四个功能:Activity继承链的规范,Http数据请求和上传下载,Bitmap大图加载以及ListView滚动时只加载内存图片,数据库对象存储与集合对象存储。还有一个独立出来的功能CJFrame插件化开发框架,支持启动在你的手机中未安装的apk应用。 

    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。 更多的使用,可以参考实际项目中的使用爱看博客客户端

  • 相关阅读:
    pyautogui页面点击和键盘输入
    eclipse把函数内容折叠的方法
    python 文件夹下文件及文件夹名称获取
    python中strftime和strptime函数
    python数组中在某一元素前插入数据
    python的递归函数
    java定义时间
    如何在word中插入代码块
    【图文详解】用Eclipse创建Maven Web项目
    【图文详解】Eclipse中添加Tomcat服务器
  • 原文地址:https://www.cnblogs.com/android-blogs/p/4843404.html
Copyright © 2011-2022 走看看