总体压缩包
NetworkDemo.zip
一、什么是OkHttp?
由Square公司贡献的一个处理网络请求的开源项目,是目前Android使用最广泛的网络框架。从Android4.4开始HttpURLConnection的底层实现采用的是OkHttp。
1.支持HTTP/2并允许对同一主机的所有请求共享一个套接字;
2.如果非HTTP/2,则通过连接池减少了请求延迟;
3.默认请求GZip压缩数据;
4.响应缓存,避免了重复请求的网络;
implementation(“com.squareup.okhttp3.okhttp:4.9.0”)
二、OkHttp基本用法
OkHttpClient okHttpClient=new OkHttpClient ();
同步请求:
异步请求:
四、get同步请求的实现步骤
get同步实现的压缩包
[NetworkDemo.zip](https://www.yuque.com/attachments/yuque/0/2021/zip/1574587/1624804724094-2216425d-d763-479a-b064-584bef2e29eb.zip?_lake_card=%7B%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2021%2Fzip%2F1574587%2F1624804724094-2216425d-d763-479a-b064-584bef2e29eb.zip%22%2C%22name%22%3A%22NetworkDemo.zip%22%2C%22size%22%3A18085795%2C%22type%22%3A%22application%2Fx-zip-compressed%22%2C%22ext%22%3A%22zip%22%2C%22status%22%3A%22done%22%2C%22taskId%22%3A%22u72b7c640-af7a-4c48-8fee-dedfe03b23a%22%2C%22taskType%22%3A%22upload%22%2C%22id%22%3A%22ub4354da2%22%2C%22card%22%3A%22file%22%7D)
1.添加依赖
2.在清单文件中添加权限
3.在布局中添加请求的按钮
4.实现按钮的方法
五、get同步请求的整体代码
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" 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:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="getSync" android:text="get同步请求" android:textSize="30sp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="getASync" android:text="get异步请求" android:textSize="30sp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="postSync" android:text="post同步请求" android:textSize="30sp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="postASync" android:text="post异步请求" android:textSize="30sp" /></LinearLayout>
2.MainActivity
package com.example.networkdemo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import java.io.IOException;import okhttp3.Call;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;public class MainActivity extends AppCompatActivity { // 第一步,构建请求器 private OkHttpClient okHttpClient; private static final String TAG="MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); okHttpClient = new OkHttpClient(); } //get 同步请求 public void getSync(View view) { // 第五步,创建一个子线程 new Thread(){ @Override public void run() { // 第二步,创建请求对象 Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build(); // 第三步,准备好请求的Call对象 Call call = okHttpClient.newCall(request); try { // 第四步,请求得到的响应 Response response = call.execute(); Log.i(TAG,"getSync:"+response.body().string()); } catch (IOException e) { e.printStackTrace(); } } }.start(); } public void getASync(View view) { } public void postSync(View view) { } public void postASync(View view) { }}
3.效果图:
六、get异步请求的实现步骤
get异步实现的压缩包
[NetworkDemo.zip](https://www.yuque.com/attachments/yuque/0/2021/zip/1574587/1624805661894-51e34b1e-3579-4261-9204-89fdf2a90917.zip?_lake_card=%7B%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2021%2Fzip%2F1574587%2F1624805661894-51e34b1e-3579-4261-9204-89fdf2a90917.zip%22%2C%22name%22%3A%22NetworkDemo.zip%22%2C%22size%22%3A18105975%2C%22type%22%3A%22application%2Fx-zip-compressed%22%2C%22ext%22%3A%22zip%22%2C%22status%22%3A%22done%22%2C%22taskId%22%3A%22u76831c50-bb07-43ab-a562-aaf145d2c0b%22%2C%22taskType%22%3A%22upload%22%2C%22id%22%3A%22uc3d1afd5%22%2C%22card%22%3A%22file%22%7D)
1.如上同get同步请求的前三个方法一致,调用enqueue实现异步请求
七、get异步请求的整体代码
1.MainActivity文件代码
package com.example.networkdemo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import org.jetbrains.annotations.NotNull;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;public class MainActivity extends AppCompatActivity { // 请求器 private OkHttpClient okHttpClient; private static final String TAG="MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); okHttpClient = new OkHttpClient(); } public void getSync(View view) { new Thread(){ @Override public void run() { // 请求对象 Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build(); // 准备好请求的Call对象 Call call = okHttpClient.newCall(request); try { // 请求得到的响应 Response response = call.execute(); Log.i(TAG,"getSync:"+response.body().string()); } catch (IOException e) { e.printStackTrace(); } } }.start(); } public void getASync(View view) { Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&a=2").build(); // 准备好请求的Call对象 Call call = okHttpClient.newCall(request); //异步请求 call.enqueue(new Callback() { @Override public void onFailure(@NotNull Call call, @NotNull IOException e) { } @Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { if (response.isSuccessful()){ Log.i(TAG,"getASync:"+response.body().string()); } } }); } public void postSync(View view) { } public void postASync(View view) { }}
2.效果图:
八、post同步请求与异步请求的实现步骤
1.post同步请求的实现
2.post异步请求的实现
九、整体代码
1.MainActivity文件整体代码
package com.example.networkdemo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import org.jetbrains.annotations.NotNull;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;public class MainActivity extends AppCompatActivity { // 请求器 private OkHttpClient okHttpClient; private static final String TAG="MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); okHttpClient = new OkHttpClient(); } public void getSync(View view) { new Thread(){ @Override public void run() { // 请求对象 Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build(); // 准备好请求的Call对象 Call call = okHttpClient.newCall(request); try { // 请求得到的响应 Response response = call.execute(); Log.i(TAG,"getSync:"+response.body().string()); } catch (IOException e) { e.printStackTrace(); } } }.start(); } public void getASync(View view) { Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&a=2").build(); // 准备好请求的Call对象 Call call = okHttpClient.newCall(request); //异步请求 call.enqueue(new Callback() { @Override public void onFailure(@NotNull Call call, @NotNull IOException e) { } @Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { if (response.isSuccessful()){ Log.i(TAG,"getASync:"+response.body().string()); } } }); } public void postSync(View view) { new Thread(){ @Override public void run() { 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 call = okHttpClient.newCall(request); try { // 请求得到的响应 Response response = call.execute(); Log.i(TAG,"postSync:"+response.body().string()); } catch (IOException e) { e.printStackTrace(); } } }.start(); } public void postASync(View view) { 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 call = okHttpClient.newCall(request); //异步请求 call.enqueue(new Callback() { @Override public void onFailure(@NotNull Call call, @NotNull IOException e) { } @Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { if (response.isSuccessful()) { Log.i(TAG, "postASync:" + response.body().string()); } } }); }}
2.post同步请求效果图:
3.post异步请求效果图:
