<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">因为本人都是自学,而且也是边学边用,肯定会有很多不足的地方,这也不是学习的定义吗?从未知的一点点摸索,到最后的大鸟。</span>
概述
HTTP是现代网络应用程序的方式。 这是我们如何与媒体交换数据。 做HTTP有效地使你的东西加载更快,节省带宽。
OkHttp默认是一个有效的HTTP客户端:
HTTP / 2支持允许所有请求相同的主机共享一个套接字。
连接池可以减少请求延迟(如果HTTP / 2不可使用)。
透明的GZIP收缩下载大小。
响应缓存避免了网络完全重复请求。
OkHttp坚守网络时麻烦:它会悄然恢复 常见的连接问题。 如果你的服务有多个IP地址OkHttp意志 如果第一个连接失败尝试备用地址。 这对IPv4 + IPv6是必要的 和冗余数据中心托管的服务。 OkHttp发起新连接 与现代TLS特性(SNI ALPN)和回落至1.0 TLS握手 失败。
使用OkHttp很容易。 它的请求/响应API与流利的建设者和设计 不变性。 它同时支持同步和异步调用阻塞调用 回调。
OkHttp支持安卓2.3及以上。 对于Java,最低要求是1.7。
以上皆是我从官网找来的,作为一个新手我表示看不太懂这么一大堆,不过可以简单的看出有这么几点好处:连接池,节约资源。可以响应缓存避免重复请求,支持同步和异步调用。
接下来接触OKhttp框架
第一步引入JAR包
可以选择从网上下载JAR包导入libs文件,如果是Android studio编辑器可以比较简单在build文件依赖里加上这么一句就可以
compile 'com.squareup.okhttp:okhttp:2.4.0'
第二步用法
不多说,代码是最强的
private final OkHttpClient client = new OkHttpClient();<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
new Thread(new Runnable() {
@Override
public void run() {
try {
Log.i("tag", "onBind: "+"sdfsdfsdfs");
Request request = new Request.Builder().url("http://news-at.zhihu.com/api/4/news/latest").build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
Log.i("tag", "onBind: " + response.code()+"sdfsdfsdfs"+response.body().string());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
这是通过GET方式提交,因为联网操作一般都是不能再主线程里操作,所以要单独开一个线程,Request是网络请求,Builder是辅助类,传入URL的网络路径。然后Response接收到传回的响应,OkHttpClient就是服务器,client.newCall(request).execute();就是发出请求,传入的也是Request请求。然后读出response里的内容,比如code状态码,还有body(),传回内容。
这就是传回的效果。这是最简单的同步GET,接下来就是异步。
二话不说上代码
new Thread(new Runnable() {
@Override
public void run() {
try {
Log.i("tag", "onBind: "+"sdfsdfsdfs");
Request request = new Request.Builder().url("http://news-at.zhihu.com/api/4/news/latest") .build();
client.newCall(request).enqueue(new com.squareup.okhttp.Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
Log.i("tag", "onBind: " + response.code()+"sdfsdfsdfs"+response.body().string());
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
异步与同步的不同就是把你想要做的响应放进去后,你可以先做别的事,到OKhttp上就是你先把你想要做的响应先放入队列里。使用enqueue方法,把请求在回调方法里面执行获得想要的数据。
效果图如上。
接下来就是POST请求,既然是post需要传参数,也非常简单,直接用add就可以。
new Thread(new Runnable() {
@Override
public void run() {
try {
Log.i("tag", "onBind: " + "sdfsdfsdfs");
RequestBody formBody = new FormEncodingBuilder().add("name", "admin").add("password", "admin").build();
Request request = new Request.Builder().url("http://news-at.zhihu.com/api/4/news/latest").post(formBody).build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
Log.i("tag", "onBind: " + response.code() + "sdfsdfsdfs" + response.body().string());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
异步也是把一些地方改成异步那样就可以了,不太复杂。今天就用到这些知识点,所以也就写这些博客,其实OKhttp还有好多功能,比如开头时说到的使用缓存,还有post提交文件,提交图片,提交资源,但是我现在没用到就写到这里吧,知识是学无止境的,怎么写也是写不完的,但是对于小鸟来说,最重要的就是把每天学到的东西及时的留下笔记,学会这些就够了。(PS:其实个人觉得,没必要把所有东西都学会,因为新技术都是时时刻刻都有可能出现的,你现在学的也许下一刻就是过时的技术了,所以只要把现在用到的学会,然后去学更新的技术就好,哈哈我为自己的懒成功的找到理由)。