因为近期学习了OkHttpUtilts的使用,所以想在这里说明一下项目集成OkHttpUtils中遇到的坑,做一个记录,也想帮助想集成OkHttpUtils的朋友能快速找到问题,定位问题,然后解决问题。
首先,我想说明的是OkHttp和OkHttpUtils的区别,OkHttp:Square出品的HTTP请求库Android系统提供了两种HTTP通信类,HttpURLConnection和HttpClient。
尽管Google在大部分安卓版本中推荐使用HttpURLConnection,但是这个类相比HttpClient实在是太难用,太弱爆了。OkHttp是一个相对成熟的解决方案,据说Android4.4的源码中可以看HttpURLConnection已经替换成OkHttp实现了。所以我们更有理由相信OkHttp的强大。OkHttp 处理了很多网络疑难杂症:会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候OkHttp会自动尝试下一个IP。OkHttp还处理了代理服务器问题和SSL握手失败问题。使用OkHttp 无需重写您程序中的网络代码。OkHttp实现了几乎java.net.HttpURLConnection一样的API。如果你用了 Apache HttpClient,则OkHttp也提供了一个对应的okhttp-apache模块。
OkHttp的官网:http://square.github.io/okhttp/
OkHttpUtils的GitHub地址:https://github.com/hongyangAndroid/okhttputils
框架的作者和代码接入
下面我说说集成方法:
1)ImportMoudle导入OkHttpUtils的okhttputils文件夹,注意是导入Moudle,而不是导入libs。
2)在Builde Gradle的Dependencies里面加 compile ‘com.zhy:okhttputils:2.6.2’。
3)在集成的okhttpUtils的build.gradle中添加
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.novoda:bintray-release:0.4.0'
}
}
4)在Application的继承类的onCreate方法初始化OkHttpUtils。
private void initOkhttpUtils() {
HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null);//ssL证书配置
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new LoggerInterceptor("TAG"))
.connectTimeout(50000L, TimeUnit.MILLISECONDS)
.readTimeout(50000L, TimeUnit.MILLISECONDS)
.cookieJar(new CookieJarImpl(new PersistentCookieStore(context))) //要在内存Cookie前
.cookieJar(new CookieJarImpl(new MemoryCookieStore()))//内存Cookie
.sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
//其他配置
.build();
OkHttpUtils.initClient(okHttpClient);
}
然后在BaseActivity和BaseFragment的成员变量里面初始化这个工具类。
以上你就已经集成OkHttpUtils到你的项目了.
// 配置基本网络请求
OkHttpUtils.post().url(url)
.id(resultCode)
.tag(context.getClass())
.params(body)
.addHeader("Content-type", "application/x-www-form-urlencoded")
.addHeader("Accept-Endoding","default")
.build().execute(this);
特点:
1)OkHttp是自动管理Cookie的,这个可以很方便的节省时间。
2)OkHttpUtils的基本配置都是在Application的继承类里面初始化完成,不用在考虑网络框架的封装问题,特别的方便。
3)OkHttpUtils的设计是根据需求来设计的,需要进行什么样的网络请求,自己Buidle好,然后处理回调的数据接口的好了。
下面是一些有用的博客可以研究一下:
Okhttp:http://blog.csdn.net/wu_wei_/article/details/52757435
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0326/2643.html
http://www.jianshu.com/p/6637369d02e7
http://www.jianshu.com/p/ca8a982a116b
http://www.jb51.net/article/88555.htm
http://www.cnblogs.com/whoislcj/p/5526431.html
http://blog.csdn.net/zackjary/article/details/52192558
https:http://www.tuicool.com/articles/3YNrmin
OkHttp的Cookie自动管理:
http://blog.csdn.net/sbsujjbcy/article/details/46895039
http://blog.csdn.net/u011150924/article/details/52780931