普通请求和下载请求都添加了立刻取消的特性,无论是通过Request#cancel()
、ReuqestQueue#cancelBySign(Object)
或者ReuqestQueue#cancelAll()
,取消后立即从队列移除,防止偶现的内存泄漏。
特别说明:本次升级不影响API的使用,请大家放心升级,如果升级之后有问题,那你顺着网线来打我啊。嘿嘿,开个玩笑,如果升级后有问题,请立刻通过issue或者qq反馈给我,保证分分钟修复并发布新版。
- 兼容
Android4.0
以下使用Https
不支持TLSv1.1
,TLSv1.2
的系统问题。 - 优化下载模块,根据url和相应头自动命名时也支持断点续传下载。
- 优化下载时多次重定向后不支持断点续传的问题。
- 初始化增加全局参数、全局请求头、全局
SSLSocketFactory
、全局HostnameVerifier
、全局重试次数。 - 初始化由原来的
Config
类变为InitializationConfig
类,并使用Build
模式。 - 修复4.x手机上发生的内存泄漏问题。
- 去掉
HttpHeaders
类,把Header
接口改为类并实现所有原接口方法。 - 去掉
DefaultDownloadRequest
类,把RequestDownload
接口改为类并实现所有接口方法。 - 去掉
IProtocolRequest
接口,直接使用ProtocolRequst
类。 - 把
Request
接口改为抽象类,提供结合队列使用的方法。 - 去掉
IBasicRequest
接口,直接向外提供BasicRequest
类。 HeaderUtil
改为HeaderUtils
,NetUtil
改为NetUtils
。- 升级
OkHttp
为3.8.0,OkHttp
原项目:https://github.com/square/okhttp
另外需要说明原来的Request#add(Map<String, String>)
更新为Request#add(Map<String, Object>)
,这样做的好处是喜欢使用Map
封装参数的同学,可以在Map
中添加以下几种类型的参数了:
String、File、Binary、List<String>、List<Binary>、List<File>、List<Object>
代码举例说明:
Map<String, Object> params = new HashMap<>();
params.put("name", "yanzhenjie");
params.put("head", new File(path));
params.put("logo", new FileBinary(file));
params.put("age", 18);
params.put("height", 180.5);
List<String> hobbies = new ArrayList<>();
hobbies.add("篮球");
hobbies.add("帅哥");
params.put("hobbies", hobbies);
List<File> goods = new ArrayList<>();
goods.add(file1);
goods.add(file2);
params.put("goods", goods);
List<Object> otherParams = new ArrayList<>();
otherParams.add("yanzhenjie");
otherParams.add(1);
otherParams.add(file);
otherParams.add(new FileBinary(file));
params.put("other", otherParams);
当然,真实开发中第三种和文件一起使用同一个key
请求,几乎不会存在,但是难免会String
、int
等使用同一个key
请求。
本次升级的一个亮点,增加拼装URL的方法,比如服务器是RESTFUL风格的API,请求用户信息时可能是这样一个URL:
http://api.nohttp.net/rest/<userid>/userinfo
这里的<userid>
就是用户名或者用户id,需要开发者动态替换,然后获取用户信息。以前是这样做的:
String userName = AppConfig.getUserName();
String url = "http://api.nohttp.net/rest/%1$s/userinfo";
url = String.format(Locale.getDefault(), url, userName);
StringRequest request = new StringRequest(url);
...
现在可以这样做:
String url = "http://api.nohttp.net/rest/";
StringRequest request = new StringRequest(url)
request.path(AppConfig.getUserName())
request.path("userinfo")
...
是对1.1.1的bug修复,无api的改动。
- 修改包名为
com.yanzhenjie.com
,开发者从旧版升级后会发生编译错误,请使用全局替换,将com.yolanda.nohttp
替换为com.yanzhenjie.nohttp
即可。 因此依赖方式也由com.yolanda.nohttp:nohttp:version
变为com.yanzhenjie.nohttp:nohttp:version
- 新增一种非队列的异步请求方式,调用后会立即发起请求:
AsyncRequestExecutor
。 - 修复StringRequest中按照服务器ContentType指定编码集解码(原来是由于解析contentType错误,默认utf-8解码)。
- 优化缓存逻辑,在不使用缓存的时候可提升请求速度与性能。
- 下载模块增加回调下载速度,具体可以参考Sample或者使用文档。
- 兼容服务器要求重定向时Location中返回不完整url的问题。
- 升级okhttp为3.6.0。