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。 更多的使用,可以参考实际项目中的使用爱看博客客户端
KJHttp框架使用讲解的更多相关文章
- java集合框架的讲解
下面要开始java中相关集合框架的学习啦. Are you ready?Let's go~~ 今天要讲解的Java中的集合框架. 1) 首先查看jdk中Collection类的源码后会发现如下内容: ...
- Django框架全面讲解
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- Android面试基础(一)IOC(DI)框架(ViewUtils)讲解_反射和自定义注解类
1. Android中的IOC(DI)框架 1.1 ViewUtils简介(xUtils中的四大部分之一) IOC: Inverse of Controller 控制反转. DI: Dependenc ...
- EGOCache缓存框架详细讲解
EGOCache是一个轻量级的缓存框架.用法简单方便,在现在的项目中,我就用到EGOCache来缓存下载过的照片和字符串. 有人可能会问到,缓存照片还需要用EGOCache吗?AFNetworking ...
- Mybatis框架配置讲解以及使用
1.什么是Mybatis MyBatis 是一款优秀的持久层框架, 它支持定制化 SQL.存储过程以及高级映射. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.·MyB ...
- 服务提供者框架讲解 之 myJDBC
利用一个简单的myJDBC,讲一下'服务提供者框架'的思想.主要是思想 目录 什么是 服务提供者框架 代码讲解 服务接口 服务提供者接口 服务注册API.服务访问API 静态工厂方法 服务实现类 – ...
- Rafy 领域实体框架 - 公司内部培训视频
本月给公司内部一个项目做架构重构,其中使用到了 Rafy 框架.所以我培训了 Rafy 领域实体框架的使用方法,过程中录制了视频,方便其他同事查看.现在把视频放到园里来分享下,有兴趣的朋友可以看看,有 ...
- Mybatis原理分析之二:框架整体设计
1.引言 本文主要讲解Mybatis的整体程序设计,理清楚框架的主要脉络.后面文章我们再详细讲解各个组件. 2.整体设计 2.1 总体流程 (1)加载配置并初始化 触发条件:加载配置文件 ...
- PDF.NET SOD 开源框架红包派送活动 && 新手快速入门指引
一.框架的由来 快速入门 有关框架的更多信息,请看框架官方主页! 本套框架的思想是借鉴Java平台的Hibernate 和 iBatis 而来,兼有ORM和SQL-MAP的特性,同时还参考了后来.N ...
随机推荐
- Shell学习笔记:#*、%*字符串掐头去尾方法
一.语法 在shell中可以通过#.%对字符串进行掐头去尾操作,使用方法如下: # 表示掐头 % 表示去尾 单个#或%表示最小匹配 双个$或%表示最大匹配 二.例子1 假设我们定义一个变量为: fi ...
- PHP性能调优---php-fpm中启用慢日志配置(用于检测执行较慢的PHP脚本)
虽然通过nginx accesslog可以记录用户访问某个接口或者网页所消耗的时间,但是不能清晰地追踪到具体哪个位置或者说函数慢,所以通过php-fpm慢日志,slowlog设置可以让我们很好的看见哪 ...
- Android Studio编译慢、卡死和狂占内存怎么破?
https://www.zhihu.com/question/27953288 作者:知乎用户链接:https://www.zhihu.com/question/27953288/answer/118 ...
- Winsock—I/O模型之选择模型(一)
Winsock中提供了一些I/O模型帮助应用程序以异步方式在一个或多个套接字上管理I/O. 这样的I/O模型有六种:阻塞(blocking)模型,选择(select)模型,WSAAsyncSelect ...
- linux如何连接移动硬盘
下载第三方插件的地方: http://www.tuxera.com/community/open-source-ntfs-3g/ 这是具体教程: http://hellopyl.blog.51cto. ...
- poj1611 The Suspects(并查集)
题目链接 http://poj.org/problem?id=1611 题意 有n个学生,编号0~n-1,m个社团,每个社团有k个学生,如果社团里有1个学生是SARS的疑似患者,则该社团所有人都要被隔 ...
- Bootstrap进阶三:jQuery插件概览
单个还是全部引入 JavaScript 插件可以单个引入(使用 Bootstrap 提供的单个 *.js 文件),或者一次性全部引入(使用 bootstrap.js 或压缩版的 bootstrap.m ...
- 关于table边框,设置了border-collapse:collapse之后,设置border-radius没效果
做项目遇到边框需要设置圆角,然后发现在设置了border-collapse:collapse之后,border-radius:10px不起作用了,发现这个是css本身的问题,两者不能混在一起使用. 代 ...
- 【运维实战】一次linux日志分割之路——将日志按照每小时进行分割,并按照“日期-小时”格式保存
是这样的,现在需要对nginx的access.log进行按照每小时进行分割,并且最好还要能够以 “日期+时间”的形式,命名保存. 两点,一个是按照每小时进行分割,一个是将日志以“日期+时间”的形式进行 ...
- session效验
看代码... <?php $servername = "服务器名"; $username = "账户名"; $password = "密码&qu ...