OKHttp是一个网络请求开源项目, Android网络请求轻量级框架,支持文件上传与下载,支持https。
2.1 OKHttp是一个高效的HTTP库:
支持HTTP/2, HTTP/2通过使用多路复用技术在一个单独的TCP连接上支持并发, 通过在一个连接上 一次性发送多个请求来发送或接收数据 如果HTTP/2不可用, 连接池复用技术也可以极大减少延时 支持GZIP, 可以压缩下载体积 响应缓存可以直接避免重复请求 会从很多常用的连接问题中自动恢复 如果您的服务器配置了多个IP地址, 当第一个IP连接失败的时候, OKHttp会自动尝试下一个IP OKHttp还处理了代理服务器问题和SSL握手失败问题
2.2 优势
使用 OKHttp无需重写您程序中的网络代码。 OKHttp实现了几乎和java.net.HttpURLConnection一样的
API。如果您用了 Apache HttpClient,则OKHttp也提供了一个对应的OKHttp-apache 模块
OKHttp的同步GET使用步骤
第一步:添加依赖
implementation("com.squareup.okhttp3:okhttp:4.10.0")
第二步:设置网络权限
<uses-permission android:name="android.permission.INTERNET" />
第三步:进行网络请求
1. 创建线程
2. 创建客户端
3. 创建请求
4. 使用客户端发送请求
5. 处理返回结果
- new Thread(new Runnable() {
- @Override
- public void run() {
- //创建客户端
- OkHttpClient client = new OkHttpClient();
- //创建请求
- Request request = new Request.Builder()
- .url("https://api.vvhan.com/api/mobil.girl?type=json")
- .build();
- //使用客户端发送请求
- try (Response response = client.newCall(request).execute()) {
- result = response.body().string();
- handler.sendEmptyMessage(0x111);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }).start();
- }
- });
- }
-
- private Handler handler = new Handler(Looper.getMainLooper()) {
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- if (msg.what == 0x111) {
- try {
- JSONObject object = new JSONObject(result);
- String imgurl = object.getString("imgurl");
- Glide.with(MainActivity.this).load(imgurl).into(im_show);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
OKHttp的异步GET使用步骤
第一步:添加依赖
implementation("com.squareup.okhttp3:okhttp:4.10.0")
第二步:设置网络权限
<uses-permission android:name="android.permission.INTERNET" />
第三步:进行网络请求
1. 创建线程
2. 创建客户端
3. 创建请求
4. 使用客户端发送请求
5. 处理返回结果
- OkHttpClient client = new OkHttpClient();
- Request request = new Request.Builder()
- .url("https://api.vvhan.com/api/mobil.girl?type=json")
- .build();
- client.newCall(request).enqueue(new Callback() {
- @Override
- public void onFailure(@NonNull Call call, @NonNull IOException e) {
- Log.i("nofailure", "fail");
- }
-
- @Override
- public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
- result = response.body().string();
- handler.sendEmptyMessage(0x111);
- Log.i("onResponse", result);
- }
- });
-
-
- private Handler handler = new Handler(Looper.getMainLooper()) {
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- if (msg.what == 0x111) {
- try {
- JSONObject object = new JSONObject(result);
- String imgurl = object.getString("imgurl");
- Glide.with(MainActivity.this).load(imgurl).into(im_show);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- }
OKHttp的同步POST使用步骤
第一步:添加依赖
implementation("com.squareup.okhttp3:okhttp:4.10.0")
第二步:设置网络权限
<uses-permission android:name="android.permission.INTERNET" />
第三步:进行网络请求
1. 创建线程
2. 创建客户端
3. 创建请求体,将参数放到请求体当中
4.创建请求
5. 使用客户端发送请求
6. 处理返回结果
- new Thread(new Runnable() {
- @Override
- public void run() {
- OkHttpClient client = new OkHttpClient();
- MediaType mediaType =
- MediaType.Companion.parse("application/json;charset=utf-8");
- MediaType param = null;
- RequestBody stringBody = RequestBody.Companion.create(String.valueOf(param), mediaType);
- Request request = new Request.Builder()
- .url("http://192.168.17.181:8080/TestWeb_war_exploded/login")
- .post(stringBody)
- .build();
- try (Response response = client.newCall(request).execute()) {
- result = response.body().string();
- handler.sendEmptyMessage(0x111);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }).start();
- }
- });
- }
-
- private Handler handler = new Handler(Looper.getMainLooper()) {
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- if (msg.what == 0x111) {
- Toast.makeText(MainActivity2.this, result, Toast.LENGTH_LONG).show();
- }
- }
OKHttp的异步POST使用步骤
第一步:添加依赖
implementation("com.squareup.okhttp3:okhttp:4.10.0")
第二步:设置网络权限
<uses-permission android:name="android.permission.INTERNET" />
第三步:进行网络请求
1. 创建线程
2. 创建客户端
3. 创建请求体,将参数放到请求体当中
4.创建请求
5. 使用客户端发送请求
6. 处理返回结果
- OkHttpClient okHttpClient = new OkHttpClient();
-
- MediaType type = MediaType.Companion.parse("application/json;charset=utf-8");
- MediaType param = null;
- RequestBody requestBody = RequestBody.Companion.create(String.valueOf(param), type);
- Request request = new Request.Builder()
- .url("http://192.168.17.181:8080/TestWeb_war_exploded/login")
- .post(requestBody)
- .build();
- okHttpClient.newCall(request).enqueue(new Callback() {
- @Override
- public void onFailure(@NonNull Call call, @NonNull IOException e) {
- Log.e("onFailure", "fail");
- }
-
-
- @Override
- public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
- result = response.body().string();
- handler.sendEmptyMessage(0x111);
- }
- });
- }