文档章节

KJBitmap与KJHttp的深度用法

爱看博客
 爱看博客
发布于 2015/10/22 10:06
字数 1412
阅读 34
收藏 0
点赞 0
评论 0

本文原创,转载请注明地址: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中提出,对于合适的建议,我们将会采纳并实现。
感谢各位的支持。

版权声明:本文原创,转载请注明来自 http://kymjs.com/

本文转载自:http://blog.csdn.net/kymjs/article/details/49000717

共有 人打赏支持
爱看博客
粉丝 5
博文 103
码字总数 23887
作品 0
深圳
kymjs/KJFrameForAndroid

================= # KJFrameForAndroid 又叫KJLibrary,是一个android的orm 和 ioc 框架。同时封装了android中的Bitmap与Http操作的框架,使其更加简单易用; KJFrameForAndroid的设计思想是...

kymjs
2014/07/22
0
0
KJFrameForAndroid 正式版发布

KJFrameForAndroid 又叫KJLibrary,是一个帮助快速开发的框架。使用KJFrameForAndroid,你可以只用一行代码就完成http请求、网络图片加载、数据库数据保存或读取。 KJFrameForAndroid的设计思...

kymjs张涛
2014/09/15
2.6K
9
KJFrameForAndroid 2.249 发布,易用性大提升

KJFrameForAndroid 的设计思想是通过封装Android原生SDK中复杂的复杂操作而达到简化Android应用级开发,最终实现快速而又安全高效的开发APP。目标是用最少的代码,完成最多的操作,用最高的效...

kymjs张涛
2015/09/28
2.6K
7
KJHttp 数据加密问题,想把所有参数加密后封装到data中,解密出现问题

android端发送数据前进行了数据加密,最终代码如下: HttpConfig httpconfig = new HttpConfig(); httpconfig.cacheTime = 0; KJHttp kjh = new KJHttp(httpconfig); User mUser = new User......

北京鸿米科技有限公司
2016/01/03
469
1
KJFrameForAndroid 2.24 发布,Android 开发框架

<>KJFrameForAndroid 的设计思想是通过封装Android原生SDK中复杂的复杂操作而达到简化Android应用级开发,最终实现快速而又安全高效的开发APP。目标是用最少的代码,完成最多的操作,用最高的...

kymjs张涛
2015/08/05
1K
4
KJFrameForAndroid 2.25 发布,支持6.0网络请求

KJFrameForAndroid 的设计思想是通过封装Android原生SDK中复杂的复杂操作而达到简化Android应用级开发,最终实现快速而又安全高效的开发APP。目标是用最少的代码,完成最多的操作,用最高的效...

kymjs张涛
2015/10/11
5.3K
8
jQuery剥皮二 - extend

jquery1.4 jquery1.4下载 这里使用了 jQuery1.4,为什么使用 1.4 因为 1.4 很多特性没有添加分析起来相对容易。 extend 可以说是 jQuery 用的最多的函数之一了,除了核心的几个函数之外其他的...

开源中国最帅没有之一
2014/11/10
0
0
jQuery.extend函数

1 扩展jQuery静态方法 用法: $.test() 2 合并多个对象 var newcss = jquery.extend(css1,css2) newcss就是合并的新对象 var newcss = jquery.extend({},css1,css2) newcss就是合并的新对象,...

雪之丞
2013/06/27
0
0
包含深度学习框架的 Docker 镜像--Deepo

Deepo是一个Docker镜像,具有完全可重现的深度学习研究环境。 它包含最受欢迎的深度学习框架: theano, tensorflow, sonnet, pytorch, keras, lasagne, mxnet, cntk, chainer, caffe, torch。...

匿名
2017/10/30
115
0
资源 | GitHub新项目Deepo:一键安装11项深度学习框架与环境

  选自GitHub   机器之心编译   参与:蒋思源      最近,一项关注于快速构建深度学习环境的 GitHub 项目十分流行,这个名为 Deepo 的项目由一系列 Docker 镜像组成,包含了 Tens...

机器之心
2017/12/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Dubbo 源码解读 —— 可支持序列化及自定义扩展

一、概述 从源码中,我们可以看出来。目前,Dubbo 内部提供了 5 种序列化的方式,分别为 fastjson、Hessian2、Kryo、fst 及 Java原生支持的方式 。 针对不同的序列化方式,对比内容如下: 名...

Ryan-瑞恩
5分钟前
0
0
MySQL内存设置—— MySQL server has gone away

set global max_allowed_packet=268435456

一梦心草
15分钟前
0
0
推导式

列表、集合和字典推导式 列表推导式是Python最受喜爱的特性之一。它允许用户方便的从一个集合过滤元素,形成列表,在传递参数的过程中还可以修改元素。形式如下: [expr for val in collect...

火力全開
20分钟前
0
0
maven配置文件settings.xml详解

settings.xml有什么用? 如果在Eclipse中使用过Maven插件,想必会有这个经验:配置settings.xml文件的路径。 settings.xml文件是干什么的,为什么要配置它呢? 从settings.xml的文件名就可以...

浮躁的码农
25分钟前
0
0
MakeCode图形化编程语言学习笔记:micro:bit编程练习题[图]

MakeCode图形化编程语言学习笔记:micro:bit编程练习题[图]: 基础训练题: Q1:摇晃micro:bit编程板,随机出现7个小动物图标中的一个,并且前后相邻两次出现的小动物不重复。 注:七个小动物...

原创小博客
25分钟前
0
0
Redis 压力测试说明

Redis 压力测试说明 redis压力测试 2014-03-24 21:41:07| 分类: 默认分类 | 标签:redis |举报|字号 订阅 这几天对比测试mongodb、redis、pg的性能,主要是在消息队列、消息处理、用户经纬度...

舒文joven
25分钟前
0
0
拉姆达表达式 追加 条件判断 Expression>

public static class PredicateBuilder {   /// <summary>   /// 机关函数应用True时:单个AND有效,多个AND有效;单个OR无效,多个OR无效;混应时写在AND后的OR有效   /// </summary...

Lytf
38分钟前
0
0
【HAVENT原创】Spring Boot + Kafka 消息日志开发

最近因为部门需要将服务程序的各种日志发送给 Kafka 进行分析,所以写一个 Kafka 消息日志操作类,主要用来保存日志到 Kafka 以便查询。 一、pom.xml 增加配置 <!-- HH: 引入 kafka 模块 ...

HAVENT
38分钟前
0
0
7、Git命令解析

1、创建版本库 cd E:mkdir myRepositorypwdls -ah======git init 2、添加文件到仓库 添加git add readme.txt提交git commit -m "i wrote a readme file"【为什么Git添加...

丑陋的皮囊
38分钟前
0
0
ImageMagick批量压缩图片

#!/bin/shfor img in `find ./image -name "*.jpg"`; donewimg=`basename $img` convert -quality 75% $img ./ok/$newimg echo ./ok/$newimgdone...

dworry
38分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部