Okhttp的使用其实相对比较简单,它的使用方法整理以下只有4步:
1,创建client对象,
2,创建请求对象
3,获取call对象
4,回调数据
当然,根据不同的需求会增加不同的步骤,但是离不开着基本的四部,不废话,直接上代码:
本文通过四个例子描述了四张常用的get,post请求方式:
直接上干货,注释相信已经非常的详细了:
//普通的get请求,得到网址直接获取数据,相对简单
private void nomalOkHttpGet() {
//创建client对象
OkHttpClient okHttpClient = new OkHttpClient();
//创建请求对象
Request request = new Request.Builder().url("此处填写url").build();
//通过上边的requsrt作为参数得到call,对象,接下来就是通过回调进行数据获取
Call call = okHttpClient.newCall(request);
//通过异步的方式
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//得到的数据在respnse中存储,有以下几种返回方式,需呀哪一张就可以使用哪一种,还有更多,这里只是例举
//返回字节数组
byte[] bytes = response.body().bytes();
//返回字节流
InputStream inputStream = response.body().byteStream();
//返回字符流
Reader reader = response.body().charStream();
//返回内容长度
long l = response.body().contentLength();
//返回内容类型
MediaType mediaType = response.body().contentType();
//返回字符串
String string = response.body().string();
}
});
try {
// 同步的方法,选择其中一个即可,如果是同步,需要创建子线程进行此操作
call.execute();
} catch (IOException e) {
e.printStackTrace();
}
}
//含有请求头的get请求,需要增加异步添加请球头的操作
private void haveHeaderOktHttpGet() {
OkHttpClient okHttpClient = new OkHttpClient();
// 创建请求,添加请求头,url可以携带参数,当然也可不携带,这里只是重点说带有请求头的请求
Request request = new Request.Builder().addHeader("name", "values").url("网址可以携带参数").build();
// 得到call对象
Call call = okHttpClient.newCall(request);
//回调数据
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
}
//带有文件和参数混合的post请求,
private void fileAndParamOkhttppost() {
OkHttpClient okHttpClient = new OkHttpClient();
//创建带有文件的文件体,tempFile为你要提交的文件
RequestBody fileBody = RequestBody.create(MediaType.parse("text/plain; charset=utf-8"), tempFile);
//创建请求体,设置请求体类型是混合类型的,然后将文件和参数等回合数据加入,
RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("参数名", "参数").addFormDataPart("参数名", "参数").addFormDataPart("参数类型", "文件类型", fileBody).build();
//创建请求对象,发起请求,
Request request = new Request.Builder().url("url").post(requestBody).addHeader("请求头名", "请求头参数").build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
}
//一个普通的post请求,携带表单上传
private void narmalOkHttpPost() {
OkHttpClient okHttpClient = new OkHttpClient();
//创建带有参数的请求体对象
RequestBody requestBody = new FormBody.Builder().add("参数名", "参数").add("参数名", "参数").build();
//将请求体放入到请求中,后边的同前边一样过程一致
Request request = new Request.Builder().url("url").post(requestBody).addHeader("请求头名", "请求头参数").build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
}