# 目录
[TOC]
# 网络层配置
**强烈建议你看此文之前看看[NoHttp的初始化与配置](http://doc.nohttp.net/222342)。**
NoHttp的网络层是通过`NetworkExecutor`接口来配置的,内部提供了一个基于`HttpURLConnection`的接口实现类`URLConnectionNetworkExecutor`,在`NoHttp`项目中用另一个`module`提供了一个基于`OkHttp`的接口实现类`OkHttpNetworkExecutor`,二者选其一即可,关于二者该如何使用选择请看[项目如何引入NoHttp](http://doc.nohttp.net/222341)。
**值得注意的是:**切换了NoHttp的网络底层后,NoHttp的上层代码不需要任何改动,你的应用层代码也不需要任何改动。
默认采用`HttpURLConnection`的实现做底层,既`URLConnectionNetworkExecutor`。
```java
NoHttp.initialize(this, new NoHttp.Config()
...
.setNetworkExecutor(new URLConnectionNetworkExecutor()) // 使用HttpURLConnection做网络层。
);
```
如果要使用OkHttp作为网络层,请在app的gradle中添加依赖:
```groovy
compile 'com.yanzhenjie.nohttp:okhttp:1.1.0'
```
然后在初始化的时候这么做:
```java
NoHttp.initialize(this, new NoHttp.Config()
...
.setNetworkExecutor(new OkHttpNetworkExecutor()) // 使用OkHttp做网络层。
);
```
# 到底该用OKHttp还是URLConnection
好多人咨询到底是使用`HttpURLConnection`还是`OkHttp`,下面做个简单的解释。
`HttpURLConnection`是Android系统自带的api,无需依赖其它任何第三方库。
- HttpURLConnection
* 不用依赖第三方底层框架,相应的apk的体积也不会增大。
* 在5.0以下的系统中`DELETE`请求方法不允许发送`body`,因此会在http协议的实现上做一些妥协。
* 在`Android4.4`以后`HttpURLConnection`的底层使用`OkHttp2.7.5`来实现。
- OkHttp
* `square`开发的第三方框架(非系统集成),相对高效、稳定。
* 写文档的时候OkHttp已经更新到`3.4.1`了。
* 使用OkHttp的好处是第三方框架有bug可以改代码,不像系统集成的api没办法改动。
我个人比较推荐使用OkHttp作为NoHttp的底层,我们公司的所有项目也是用nohttp的,全都是配置okhttp为底层的。