OKHttp的基础用法
第一章 准备工作
第01节 资源库的准备
1、位置
在 build.gradle 当中的 dependencies 里面导入 okhttp 的操作。
2、代码
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
第02节 清单文件权限
1、位置
在 manifests 清单文件当中的 AndroidManifest.xml 当中引入网络权限
2、代码
第03节 布局控件准备
1、位置
res/layout/activity_main.xml 当中添加按钮信息。
2、代码
第04节 提前创建对象
1、位置
在 MainActivity 里面,提前创建好 OkHttp的对象,以便于下面的使用
2、代码
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private OkHttpClient okHttpClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//需要提前准备好的okHttp的对象
okHttpClient = new OkHttpClient();
}
}
第二章 核心代码
第01节 GET同步请求
1、说明
GET 同步请求:
1、同步的操作,需要放在线程当中执行
2、完成需要的步骤有四步:
A. 获取到请求的对象
B. 获取到回调的对象
C. 同步请求,得到响应对象
D. 获取到响应体信息
2、代码
//GET请求, 同步的 GET请求方式
btnGetSync.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(()->{
try {
//1、获取到请求的对象
Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").get().build();
//2、获取到回调的对象
Call call = okHttpClient.newCall(request);
//3、同步请求,得到响应的对象
Response response = call.execute();
//4、获取到响应体信息
Log.i(TAG, "onClick: GET-SYNC "+response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
});
3、日志
2021-10-20 16:28:51.845 19762-19808/chc.svip.demo01 I/MainActivity: onClick: GET-SYNC {
"args": {
"a": "1",
"b": "2"
},
"headers": {
"Accept-Encoding": "gzip",
"Host": "www.httpbin.org",
"User-Agent": "okhttp/4.9.0",
"X-Amzn-Trace-Id": "Root=1-616fd344-3794e0ff40a93e825a466f0f"
},
"origin": "113.57.157.75",
"url": "https://www.httpbin.org/get?a=1&b=2"
}
第02节 GET异步请求
1、说明
GET 异步请求:
1、异步的操作,不需要放在线程当中执行,异步操作,内部有线程进行维护
2、完成需要步骤有四步:
A. 获取到请求的对象
B. 获取到回调的对象
C. 异步请求,执行 CallBack
D. 判断响应是否成功,获取响应体信息
2、代码
//GET请求, 异步的 GET请求方式
btnGetAsync.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//1、获取到请求的对象
Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").get().build();
//2、获取到回调的对象
Call call = okHttpClient.newCall(request);
//3、异步请求,执行CallBack
call.enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
//判断响应是否成功了?
if (response.isSuccessful()){
//输出响应体
Log.i(TAG, "onResponse: GET-ASYNC "+response.body().string());
}
}
});
}
});
3、日志
2021-10-20 16:33:18.702 19762-19959/chc.svip.demo01 I/MainActivity: onResponse: GET-ASYNC {
"args": {
"a": "1",
"b": "2"
},
"headers": {
"Accept-Encoding": "gzip",
"Host": "www.httpbin.org",
"User-Agent": "okhttp/4.9.0",
"X-Amzn-Trace-Id": "Root=1-616fd44f-579aac220d280ce05e86ca34"
},
"origin": "113.57.157.75",
"url": "https://www.httpbin.org/get?a=1&b=2"
}
第03节 POST同步请求
1、说明
POST 同步请求:
1、同步的操作,需要放在线程当中执行
2、完成需要步骤有五步:
A. 封装请求体数据
B. 获取到请求的对象
C. 获取到回调的对象
D. 执行同步请求,获取到响应对象
E. 通过响应对象,展示数据结果
2、代码
//POST请求, 同步的 POST请求方式
btnPostSync.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(()->{
try {
//1、封装请求体数据
FormBody formBody = new FormBody.Builder().add("a","1").add("b","2").build();
//2、获取到请求的对象
Request request = new Request.Builder().url("https://www.httpbin.org/post").post(formBody).build();
//3、获取到回调的对象
Call call = okHttpClient.newCall(request);
//4、执行同步请求,获取到响应对象
Response response = call.execute();
//5、展示数据结果
Log.i(TAG, "onClick: POST-SYNC "+response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
});
3、日志
2021-10-20 16:37:55.649 19762-20263/chc.svip.demo01 I/MainActivity: onClick: POST-SYNC {
"args": {},
"data": "",
"files": {},
"form": {
"a": "1",
"b": "2"
},
"headers": {
"Accept-Encoding": "gzip",
"Content-Length": "7",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "www.httpbin.org",
"User-Agent": "okhttp/4.9.0",
"X-Amzn-Trace-Id": "Root=1-616fd564-2ead68b34363d59972d1ab60"
},
"json": null,
"origin": "113.57.157.75",
"url": "https://www.httpbin.org/post"
}
第04节 POST异步请求
1、说明
POST 异步请求:
1、异步的操作,不需要在线程当中执行,异步操作,内部有线程进行维护
2、完成需要步骤有五步:
A. 封装请求体数据
B. 获取请求的对象
C. 获取到回调的对象
D. 执行异步请求
E. 判断响应成功
2、代码
//POST请求, 异步的 POST请求方式
btnPostAsync.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//1、封装请求体数据
FormBody formBody = new FormBody.Builder().add("a","1").add("b","2").build();
//2、获取到请求的对象
Request request = new Request.Builder().url("https://www.httpbin.org/post").post(formBody).build();
//3、获取到回调的对象
Call call = okHttpClient.newCall(request);
//4、执行异步请求
call.enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
//5、判断是否响应成功
if (response.isSuccessful()){
//展示结果
Log.i(TAG, "onResponse: POST-ASYNC "+response.body().string());
}
}
});
}
});
3、日志
2021-10-20 16:42:33.448 19762-20527/chc.svip.demo01 I/MainActivity: onResponse: POST-ASYNC {
"args": {},
"data": "",
"files": {},
"form": {
"a": "1",
"b": "2"
},
"headers": {
"Accept-Encoding": "gzip",
"Content-Length": "7",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "www.httpbin.org",
"User-Agent": "okhttp/4.9.0",
"X-Amzn-Trace-Id": "Root=1-616fd67a-6e7191e65578212416d6defd"
},
"json": null,
"origin": "113.57.157.75",
"url": "https://www.httpbin.org/post"
}