KJBitmap与KJHttp的深度用法

来源:互联网 发布:网络用语lb是什么意思 编辑:程序博客网 时间:2024/06/07 09:42

本文原创,转载请注明地址:http://kymjs.com/code/2015/09/24/01

之前写过一些有关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中,或控件还没有显示出来的时候)此时框架会自动以屏幕宽高的一半来作为图片的宽高,但当你的图片比屏幕宽高一半要大的时候,就会变模糊了。
解决办法很简单,只需要通过重载方法(或我们新提供的建造者方法)给图片手动设置正确的宽高就可以了。例如kjb.display(view,url,480,800);

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);

你的意见

如果你有什么新的建议可以在我的博客留言板http://kymjs.com/tweet,或在GitHub项目Issue中提出,对于合适的建议,我们将会采纳并实现。
感谢各位的支持。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 烫头发后洗头了怎么办 头发染得太黄了怎么办 烫发后一直掉发怎么办 头发染的太黄了怎么办 头发染色太浅了怎么办 怀孕60天没有胎心怎么办 染了深褐色很黑怎么办 路边停车费没交怎么办 3岁宝宝难入睡怎么办 一上火眼睛就肿怎么办 孩子上火眼睛红有眼屎怎么办 孩子眼屎多又黄怎么办 眼睛皮周围红痒怎么办 新买的拖鞋有味怎么办 毛巾变得滑滑的怎么办 买的挂钩粘不住怎么办 吸墙挂钩吸不住怎么办 沾挂钩不粘了怎么办 粘钩掉了不粘了怎么办 贴墙挂钩粘不住怎么办 月经量大血块多怎么办 23岁乳房小扁平怎么办 十六岁基本没胸怎么办 肚子上的肉松弛怎么办 17岁乳房外扩该怎么办 胸下垂严重怎么办 17岁 棉条超过8小时了怎么办 在学校来了月经怎么办 如果在学校来月经怎么办 来月经流血量大怎么办 非经期出血量多怎么办 在学校来月经了怎么办 月经好久不来了怎么办 例假推迟了20天怎么办 月经晚了13天了怎么办 大姨吗推迟十天怎么办 月经推迟了3个月怎么办 例假推迟了15天怎么办 来月经同了房怎么办呢 来月经同了房该怎么办 21岁天生贫乳怎么办