博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KJBitmap与KJHttp的深度用法
阅读量:4345 次
发布时间:2019-06-07

本文共 2837 字,大约阅读时间需要 9 分钟。

摘要

本文原创,转载请注明地址:

这篇文章是对KJFrameForAndroid使用的一个深入学习

之前写过一些有关KJFrame的基础用法,,,,通过这几篇博客,我们已经可以基本满足使用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的包,并复制(再次感谢猫猫提供编写的这个类)到你的项目中,并使用

httpconfig = new httpconfig(); httpconfig.mNetwork = new Network(new OkHttpStack()); kjhttp = new kjhttp(httpconfig);

你的意见

感谢各位的支持。

转载于:https://www.cnblogs.com/android-blogs/p/4843338.html

你可能感兴趣的文章
一般处理程序在VS2012中打开问题
查看>>
C语言中的++和--
查看>>
thinkphp3.2.3入口文件详解
查看>>
POJ 1141 Brackets Sequence
查看>>
Ubuntu 18.04 root 使用ssh密钥远程登陆
查看>>
Servlet和JSP的异同。
查看>>
虚拟机centOs Linux与Windows之间的文件传输
查看>>
IOS内存管理
查看>>
[Bzoj1009][HNOI2008]GT考试(动态规划)
查看>>
Blob(二进制)、byte[]、long、date之间的类型转换
查看>>
OO第一次总结博客
查看>>
day7
查看>>
iphone移动端踩坑
查看>>
vs无法加载项目
查看>>
Beanutils基本用法
查看>>
玉伯的一道课后题题解(关于 IEEE 754 双精度浮点型精度损失)
查看>>
《BI那点儿事》数据流转换——百分比抽样、行抽样
查看>>
哈希(1) hash的基本知识回顾
查看>>
Leetcode 6——ZigZag Conversion
查看>>
dockerfile_nginx+PHP+mongo数据库_完美搭建
查看>>