# NoHttp升级日志

## 1.1.3 
**特别说明**:本次升级不影响API的使用,请大家放心升级,如果升级之后有问题,那你顺着网线来打我啊。嘿嘿,开个玩笑,如果升级后有问题,请立刻通过issue或者qq反馈给我,保证分分钟修复并发布新版。

1. 兼容`Android4.0`以下使用`Https`不支持`TLSv1.1`,`TLSv1.2`的系统问题。
2. 优化下载模块,根据url和相应头自动命名时也支持断点续传下载。
3. 优化下载时多次重定向后不支持断点续传的问题。
4. 初始化增加全局参数、全局请求头、全局`SSLSocketFactory`、全局`HostnameVerifier`、全局重试次数。
5. 初始化由原来的`Config`类变为`InitializationConfig`类,并使用`Build`模式。
6. 修复4.x手机上发生的内存泄漏问题。
7. 去掉`HttpHeaders`类,把`Header`接口改为类并实现所有原接口方法。
8. 去掉`DefaultDownloadRequest`类,把`RequestDownload`接口改为类并实现所有接口方法。
9. 去掉`IProtocolRequest`接口,直接使用`ProtocolRequst`类。
10. 把`Request`接口改为抽象类,提供结合队列使用的方法。
11. 去掉`IBasicRequest`接口,直接向外提供`BasicRequest`类。
12. `HeaderUtil`改为`HeaderUtils`,`NetUtil`改为`NetUtils`。
13. 升级`OkHttp`为3.8.0,`OkHttp`原项目:[https://github.com/square/okhttp](https://github.com/square/okhttp)

另外需要说明原来的`Request#add(Map<String, String>)`更新为`Request#add(Map<String, Object>)`,这样做的好处是喜欢使用`Map`封装参数的同学,可以在`Map`中添加以下几种类型的参数了:  
```java
String、File、Binary、List<String>、List<Binary>、List<File>、List<Object>
```

代码举例说明:
```java
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.2
 是对1.1.1的bug修复,无api的改动。  

## 1.1.1
 1. 修改包名为`com.yanzhenjie.com`,开发者从旧版升级后会发生编译错误,请使用全局替换,将`com.yolanda.nohttp`替换为`com.yanzhenjie.nohttp`即可。
 因此依赖方式也由`com.yolanda.nohttp:nohttp:version`变为`com.yanzhenjie.nohttp:nohttp:version`
 2. 新增一种非队列的异步请求方式,调用后会立即发起请求:`AsyncRequestExecutor`。
 3. 修复StringRequest中按照服务器ContentType指定编码集解码(原来是由于解析contentType错误,默认utf-8解码)。
 4. 优化缓存逻辑,在不使用缓存的时候可提升请求速度与性能。
 5. 下载模块增加回调下载速度,具体可以参考[Sample](https://github.com/yanzhenjie/NoHttp)或者[使用文档](http://doc.nohttp.net)。
 6. 兼容服务器要求重定向时Location中返回不完整url的问题。
 7. 升级okhttp为3.6.0。