okhttp 简介
OkHttp
:
Square
出品的
HTTP
请求库
Android系统提供了两种HTTP通信类,HttpURLConnection和HttpClient。
尽管Google在大部分安卓版本中推荐使用HttpURLConnection,但是这个类相比HttpClient实在是太难用,太弱爆了。
OkHttp是一个相对成熟的解决方案,据说Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了。所以我们更有理由相信OkHttp的强大。
尽管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都能实现些什么功能呢?
一般的get请求
一般的post请求
基于Http的文件上传
文件下载
加载图片
支持请求回调,直接返回对象、对象集合
….......
首先,你需要在你的build.gradle中的
dependencies里添加:
compile 'com.squareup.okhttp3:okhttp:3.4.1'//以最新的版本为准
Get请求
OkHttpClient client=new OkHttpClient(); Request request=new Request.Builder().url(path).build(); Call call=client.newCall(request); call.enqueue(new Callback() { //失败 @Override public void onFailure(Call call, IOException e) { } //成功 @Override public void onResponse(Call call, Response response) throws IOException { //返回String String json=response.body().string(); //返回byte[] response.body().bytes(); //返回流 response.body().byteStream(); } });
okhttpclient :okthttp主要类,客户端
Post请求Request:请求服务端 Request.Builder():建造者设计模式:将一个复杂的对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示 url(path):输入你的接口地址 build:结束,返回Request对象
Call 将你的请求封装成任务
call.enqueue请求调度,回调出两个方法,一个成功,一个失败,成功的话可以通过response来获取你要的数据类型,可以是string
可以是byte【】,可以是流,一般都是返回string的json字符串
//okhttpclient :okthttp主要类 OkHttpClient client=new OkHttpClient(); /* RequestBody:请求体,携带参数去服务端访问 FormBody:设置表单参数,用它来设置要携带的参数 FormBody.Builder():设计模式:将一个复杂的对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示
add():你要携带的参数,key , value形式,可以添加多个
build:结束,返回一个RequestBody */
RequestBody body=new FormBody.Builder().add("name","xiaoming").add("age","18").build();
//创建Request
Request request=new Request.Builder().url(path).post(body).build();
//Call 将你的请求封装成任务Call call=client.newCall(request);
//请求调度
call.enqueue(new Callback() {
//失败
@Override
public void onFailure(Call call, IOException e) {
}
//成功
@Override
public void onResponse(Call call, Response response) throws IOException {
String json= response.body().string();
}});
封装
新建一个类,然后写个单例,然后开始封装
String run(String url) throws IOException { Request request=new Request.Builder().url(url).build(); Call call=client.newCall(request); //通过call.execute()获得response; Response response=call.execute(); return response.body().string(); }demo地址:https://github.com/wuwei12345/OKhttpDemo