KJBitmap与KJHttp的深度用法
摘要
本文原创,转载请注明地址:http://kymjs.com/code/2015/09/24/01
这篇文章是对KJFrameForAndroid使用的一个深入学习
之前写过一些有关KJFrame的基础用法,KJBitmap使用方法,KJHttp使用讲解,使用框架帮助Activity规范化,通过这几篇博客,我们已经可以基本满足使用KJFrame开发APP了。
接下来,今天我们要讲的是更深入的自定义使用方法。
建造者模式引入
从KJFrame的2.249版本以来,在KJBitmap与KJHttp中提供了一种全新的构建方法——建造者模式(说是全新其实只是相对历史版本来说,毕竟建造者模式并不是什么新概念)。之所以会使用这种模式,其实是因为有使用者反馈说通过函数重载的形式,要记忆太多方法参数,有时可能还会由于参数记错而调用错函数,所以为了避免这种问题,帮助大家更好的使用,KJFrameForAndroid提供了建造者模式来构建。
首先来讲讲建造者模式是怎么实现的。
你可以在对象中创建一个能帮助你构建出这个对象的子类。它使用了可变语句,但是一旦你调用了build,它就会提供给你一个不可变的对象。 想象一下我们要有一个更加复杂的 DataHolder。针对它的构建器看起来可能像是下面这样:
public class ComplicatedDataHolder {
public final String data;
public final int num;
// lots more fields and a constructor
public static class Builder {
private String data;
private int num;
public Builder data(String data) {
this.data = data;
return this;
}
public Builder num(int num) {
this.num = num;
return this;
}
public ComplicatedDataHolder build() {
return new ComplicatedDataHolder(data, num); // etc
}
}}
然后这样去使用它:
final ComplicatedDataHolder cdh = new ComplicatedDataHolder.Builder()
.data("set this")
.num(523)
.build();
框架源码
那么在KJBitmap中(查看源码实现),我们可以这样去显示一张图片:
//让imageview控件去显示网络图片http://xxx.jpg
new KJBitmap.Build().view(imageview).imageUrl("http://xxx.jpg").dispay();
//如果你需要指定宽高,也很容易,只需要继续调用构建就行了
new KJBitmap.Build().view(imageview).imageUrl("http://xxx.jpg").width(480).height(800).dispay();
当然,为了兼容使用旧版本开发的项目,我们依旧会保留原重载的display(),只是会添加过时注解。
同样的,在KJHttp中也加入了建造者模式去发起网络请求(查看源码),我们可以这样去发起一个请求:
new KJHttp.Build().url("http://xxx").callback(new HttpCallback(){
onSuccess()//自行实现
}).request();
//默认的请求是GET发起的FORM请求,当然也可以配置成POST,以及JSON参数的请求,同时也可以设置是否启用缓存
new KJHttp.Build().url("http://xxx").
httpMethod(HttpMethod.POST).contentType(ContentType.JSON).useCache(true).params(httpparams).callback(new HttpCallback(){
onSuccess()//自行实现
}).request();
小心这些坑
Q:为什么有些时候用KJBitmap加载全屏图片的时候会有模糊的问题。
A:首先再跟大家讲一些KJBitmap的原理:框架会自动根据控件的大小去判断应该加载多大的图片,但是有些时候我们没办法获取到控件的大小(例如在ListView中,或控件还没有显示出来的时候)此时框架会自动以屏幕宽高的一半来作为图片的宽高,但当你的图片比屏幕宽高一半要大的时候,就会变模糊了。
解决办法很简单,只需要通过重载方法(或我们新提供的建造者方法)给图片手动设置正确的宽高就可以了。
Q:为什么我使用KJHttp的post方法时,发生了数组下标溢出异常。
A:又是理论:在Http请求中,post请求在理论上来说是必须传参数的,如果不传参数就应该使用get方法。但是在实际开发中,很多朋友反应后台服务端开发者荒唐的将一切请求都用post去做,迫不得已。
解决办法:在过去我们可以手动传递一个无用参数,或自己new一个FromRequest()并指定使用POST请求。当然最新的版本为大家考虑了这点,你无需再为你坑定的后台去额外费大脑费时间了,为空就传个空的params过去吧,框架已经为你判断了。
更多的KJHttp使用方法
####https的支持
在过去,对于https默认是不信任任何网站证书,从2.248版本以后,我们设置了默认的信任任何网站的证书。虽然这听起来没有任何改变,但是却为很多小白型开发者提供了很大的帮助,可以减轻很多时间去搜去写了(我们的口号就是用最少的代码实现最多的功能)。
当然,信任所有证书也并不是最好的解决办法。你可以使用
httpconfig = new httpconfig();
httpconfig.mNetwork = new Network(httpStackFactory("在这里传你的ssl证书"));
kjhttp = new kjhttp(httpconfig);
有关Android 6.0的兼容
框架目前不能兼容6.0,你有两个解决办法
1、静静等待,对于6.0的兼容将会在半个月内完成
2、通过OkHttp,引入OkHttp的包,并复制(再次感谢猫猫提供编写的这个类)OkHttpStack.java到你的项目中,并使用
httpconfig = new httpconfig();
httpconfig.mNetwork = new Network(new OkHttpStack());
kjhttp = new kjhttp(httpconfig);
你的意见
感谢各位的支持。
KJBitmap与KJHttp的深度用法的更多相关文章
- Flask最强攻略 - 跟DragonFire学Flask - 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
- Jinja2 及 render_template 的深度用法
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
- 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
- 3,Flask 中的模板语言 Jinja2 及 render_template 的深度用法
Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符串,用于传递到前端 S ...
- flask 中的模板语法 jinja2及render_template的深度用法
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
- flask模板语言 jinja2 以及render_template 深度用法
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
- Flask 中的模板语言 Jinja2 及 render_template 的深度用法
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
- 面向忙碌开发者的 Android
面向忙碌开发者的 Android passiontim 关注 2016.11.19 21:41* 字数 4013 阅读 2967评论 2喜欢 92 面向忙碌开发者的 Android 视频教程(Tuts ...
- KJBitmap使用方法
摘要 本文原创,转载请注明地址:http://kymjs.com/code/2015/03/25/01 摘要 好像最近一个月都没有写博客了,正好伴着KJFrameForAndroid 更新v2.14版 ...
随机推荐
- extjs获取选中列表!
extjs 当批量某一table 元素时! 获取元素的属性! var list= []; var array = grid.getSelectionModel().getSelections() ...
- 利用CE手动破解百度云下载限速!
一步,你需要打开百度云<ignore_js_op> 第二步,你需要用上面附送的工具选择百度云进程<ignore_js_op> 第三点,不多说,看图<ignore_js_o ...
- 移动端自动化测试(二)之 Appium常用的API(python)函数介绍
上一章节已经介绍了Appium的环境搭建,其实只要掌握了Appium的工作原理,前期的准备工作和安装过程是比较简单的.那么当我们搭建好Appium环境后接下来做些什么呢?通常思路是开始appium的第 ...
- django.db.utils.OperationalError: 1045错误
django.db.utils.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using pass ...
- C# Zip解压缩,规避 [content_types].xml 文件
使用 System.IO.Packaging.Package 进行压缩和解压时,会自动生成 [content_types].xml 文件. The Structure of the [Content_ ...
- Picasso:开启大前端的未来
“道生一,一生二,二生三,三生万物.” —— <道德经> Picasso是大众点评移动研发团队自研的高性能跨平台动态化框架,经过两年多的孕育和发展,目前在美团多个事业群已经实现了大规模的应 ...
- python issubclass 和 isinstance函数
Python issubclass() 函数 issubclass() 方法用于判断参数 class 是否是类型参数 classinfo 的子类. 语法: issubclass(class, clas ...
- 概率论中常见分布总结以及python的scipy库使用:两点分布、二项分布、几何分布、泊松分布、均匀分布、指数分布、正态分布
概率分布有两种类型:离散(discrete)概率分布和连续(continuous)概率分布. 离散概率分布也称为概率质量函数(probability mass function).离散概率分布的例子有 ...
- request.get_full_path() 和request.path区别
1. 都是获取request 请求的url路径 2. request.get_full_path() -- 获取当前url,(包含参数) 请求一个http://127.0.0.1:8000/200/? ...
- CF597C Subsequences 树状数组 + 动态规划
设$f(i, j)$表示以$i$结尾的,长为$j$的上升子序列的数量 转移时用树状数组维护即可 复杂度为$O(kn \log n)$ 注:特判0 #include <cstdio> #in ...