# 目錄
[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為底層的。