本来是想围绕着HttpClient讲解的,后来发先Android4.4之后okhttp代替了hc,所以将不再讲解hc
okhttp的简单使用,主要包含:一般的get请求
一般的post请求
基于Http的文件上传
文件下载
加载图片
支持请求回调,直接返回对象、对象集合
支持session的保持
GitHub地址
OkHttp的GitHub地址是:OkHttp
依赖库导入
使用前需要先在项目中添加OkHttp的依赖库,在对应的Module的gradle中添加如下语句,目前最新应该是4.1.0implementation("com.squareup.okhttp3:okhttp:4.1.0")
添加网络权限
一、GET请求
OkHttp支持同步和异步的网络请求,demo代码如下:
同步GET请求public void httpSyncGetTest(){
OkHttpClient okHttpClient = new OkHttpClient();
//2.创建Request对象,设置一个url地址(百度地址),设置请求方式。
Request request = new Request.Builder()
.url("http://www.niwoxuexi.com")
.get()
.build();
//3.创建一个call对象,参数就是Request请求对象
Call call = okHttpClient.newCall(request);
//4.同步调用会阻塞主线程,这边在子线程进行
new Thread(new Runnable() {
@Override
public void run() {
try {
//同步调用,返回Response,会抛出IO异常
Response response = call.execute();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
异步GET请求public void httpAsyncGetTest(){
//1.创建OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
//2.创建Request对象,设置一个url地址(百度地址),设置请求方式。
Request request = new Request.Builder()
.url("http://www.baidu.com")
.get()
.build();
//3.创建一个call对象,参数就是Request请求对象
Call call = okHttpClient.newCall(request);
//4.请求加入调度,重写回调方法
call.enqueue(new Callback() {
//请求失败执行的方法
@Override
public void onFailure(Call call, IOException e) {
String err = e.getMessage().toString();
}
//请求成功执行的方法
@Override
public void onResponse(Call call, Response response) throws IOException {
final String rtn = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
}
);
}
});
}
需要注意的是,异步调用的回调函数是在子线程当中的,因为需要用Handler或者runOnUiThread来更新UI
二、POST类型
在OkHttp中用Post方法向服务器发送一个请求体时,请求体需要是一个RequestBody。这个请求体可以是:
key-value:键值对类型
String:字符串类型
For