OKHttp的基础用法
第一章 准备工作
第01节 资源库的准备
1、位置
在 build.gradle 当中的 dependencies 里面导入 okhttp 的操作。
2、代码
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
第02节 清单文件权限
1、位置
在 manifests 清单文件当中的 AndroidManifest.xml 当中引入网络权限
2、代码
<uses-permission android:name="android.permission.INTERNET"/>
第03节 布局控件准备
1、位置
res/layout/activity_main.xml 当中添加按钮信息。
2、代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/getsync"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/getsync"/>
<Button
android:id="@+id/getasync"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="GET异步请求"/>
<Button
android:id="@+id/postsync"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="POST同步请求"/>
<Button
android:id="@+id/postasync"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="POST异步请求"/>
</LinearLayout>
第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);
okHttpClient = new OkHttpClient();
}
}
第二章 核心代码
第01节 GET同步请求
1、说明
GET 同步请求:
1、同步的操作,需要放在线程当中执行
2、完成需要的步骤有四步:
A. 获取到请求的对象
B. 获取到回调的对象
C. 同步请求,得到响应对象
D. 获取到响应体信息
2、代码
btnGetSync.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(()->{
try {
Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").get().build();
Call call = okHttpClient.newCall(request);
Response response = call.execute();
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、代码
btnGetAsync.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").get().build();
Call call = okHttpClient.newCall(request);
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、代码
btnPostSync.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(()->{
try {
FormBody formBody = new FormBody.Builder().add("a","1").add("b","2").build();
Request request = new Request.Builder().url("https://www.httpbin.org/post").post(formBody).build();
Call call = okHttpClient.newCall(request);
Response response = call.execute();
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、代码
btnPostAsync.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FormBody formBody = new FormBody.Builder().add("a","1").add("b","2").build();
Request request = new Request.Builder().url("https://www.httpbin.org/post").post(formBody).build();
Call call = okHttpClient.newCall(request);
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: 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"
}
|