一、Okhttp介绍:
1、Okhttp开源库出自Square公司,是一个优秀的网络请求框架,它基于httpURLConnectiond的封装,支持get/post请求,文件的上传和下载,图片的加载,让写法更加简单,可以处理更加复杂的网络请求。
2、Okhttp可是实现的功能
- get/post同步、异步请求
- 文件的上传,下载
- 图片的加载
- 请求回调等
3、Okhttp的特点
- 响应缓存
- 支持GZIP压缩
- 支持websocket
- 多IP切换
- 减少连接池请求延时
二、Okhttp请求准备
##1、OkHttp的依赖的引入
Module的gradle中添加
--------------------------------------------------------
compile 'com.squareup.okhttp3:okhttp:3.5.0'
--------------------------------------------------------
然后同步一下项目即可。
okhttp有自己的官网,可在官网上查询最新依赖,官网网址:OKHttp官网
##2、OkHttp中添加权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
三、OkHttp进行Get请求
Get 请求只需要四步即可完成:
1 . 获取OkHttpClient对象:
1
|
OkHttpClient client = new OkHttpClient();
|
2 . 构造Request对象:
1
2
3
4
|
Request request = new Request.Builder()
. get ()
.url( "https:www.baidu.com" )
.build();
|
3 . 将Request封装为Call:
1
|
Call call = client.newCall(request);
|
4 . 根据需要调用同步或者异步请求方法
1
|
<strong> 同步调用</strong>
|
1
2
|
//同步调用,返回Response,
Response response = call.execute();
|
异步调用
//异步调用,并设置回调函数
call.enqueue(new Callback() {
//请求失败调用
@Override
public void onFailure(Call call, IOException e) {
Toast.makeText(OkHttpActivityDemo.this, "get failed", Toast.LENGTH_SHORT).show();
}
//请求成功调用
@Override
public void onResponse(Call call, final Response response) throws IOException {
final String res = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(OkHttpActivityDemo.this, "get success", Toast.LENGTH_SHORT).show();
}
});
}
});
注意:
在异步调用时,回调函数是在子线程,不能在子线程更新UI,需要借助于 runOnUiThread() 方法或者 Handler 来处理
四、OkHttp进行Post请求提交键值对:
Post 请求和进行 Get 请求很类似。
1 、获取OkHttpClient对象:
2、使用FormBody构建包含键值对类型参数的请求体:
1
2
3
4
|
FormBody formBody = new FormBody.Builder()
.add( "username" , "admin" )
.add( "password" , "123" )
.build();
|
3、 构建Request,将FormBody作为Post方法的参数传入
Request request = new Request.Builder()
.url("http://www.jianshu.com/")
.post(formBody)
.build();
4、将Request封装为Call
1
|
Call call = client.newCall(request);
|
5 . 调用请求,重写回调方法
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Toast.makeText(OkHttpActivityDemo.this, "Post Failed", Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String res = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(OkHttpActivityDemo.this, "Post success", Toast.LENGTH_SHORT).show();
}
});
}
});
五、后记
以上就是 OkHttp 常用get和set请求的总结,当热还有文件的上传和下载等。