【Android Studio】整合okhttp发送get和post请求(提供Gitee源码)

前言:本篇博客教学大家如何使用okhttp发送同步/异步get请求和同步/异步post请求,这边博主把代码全部亲自测试过了一遍,需要源码的可以在文章最后自行拉取。

目录

一、导入依赖

二、开启外网访问权限

三、发送请求

3.1、发送同步get请求

3.2、发送异步get请求

3.3、发送同步post请求

3.4、发送异步post请求

四、完整代码

4.1、activity_main.xml页面

4.2、MainActivity实体类

五、Gitee源码


一、导入依赖

找到build.gradle文件,在dependencies中添加如下依赖:

XML 复制代码
implementation 'com.squareup.okhttp3:okhttp:3.5.0'

如图所示:

二、开启外网访问权限

找到AndroidManifest.xml文件,添加如下两行代码:

XML 复制代码
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

如图所示:

三、发送请求

先定义一个全局变量:

java 复制代码
private OkHttpClient client = new OkHttpClient();

3.1、发送同步get请求

关键代码:

java 复制代码
// 发送同步GET请求
new Thread(() -> {
    Request request = new Request.Builder()
            .url("https://www.httpbin.org/get?key=1&value=2")
            .build();
    try {
        Response response = client.newCall(request).execute();
        String responseData = response.body().string();
        System.out.println(responseData);
        // 处理返回的数据
    } catch (IOException e) {
        e.printStackTrace();
    }
}).start();

运行结果:

3.2、发送异步get请求

关键代码:

java 复制代码
// 发送异步GET请求
Request request = new Request.Builder()
        .url("https://www.httpbin.org/get?key=1&value=2")
        .build();
client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        e.printStackTrace();
    }
    @Override
    public void onResponse(Call call, Response response) throws IOException {
        String responseData = response.body().string();
        System.out.println(responseData);
        // 处理返回的数据
    }
});

运行结果:

3.3、发送同步post请求

关键代码:

java 复制代码
// 发送同步POST请求
new Thread(() -> {
    RequestBody requestBody = new FormBody.Builder()
            // 添加POST请求参数
            .add("key","1")
            .add("value","2")
            .build();
    Request request = new Request.Builder()
            .url("https://www.httpbin.org/post")
            .post(requestBody)
            .build();
    try {
        Response response = client.newCall(request).execute();
        String responseData = response.body().string();
        System.out.println(responseData);
        // 处理返回的数据
    } catch (IOException e) {
        e.printStackTrace();
    }
}).start();

运行结果:

3.4、发送异步post请求

关键代码:

java 复制代码
// 构建JSON数据字符串
String json = "{\"key\": \"1\", \"value\": \"2\"}";
// 创建RequestBody
RequestBody requestBody = RequestBody.create(
        MediaType.parse("application/json"), json);
Request request = new Request.Builder()
        .url("https://www.httpbin.org/post")
        .post(requestBody)
        .build();
client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        e.printStackTrace();
    }
    @Override
    public void onResponse(Call call, Response response) throws IOException {
        String responseData = response.body().string();
        System.out.println(responseData);
    }
});

运行结果:

四、完整代码

4.1、activity_main.xml页面

完整代码:

XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:padding="16dp"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnSyncGet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送同步GET请求"
        android:layout_marginTop="20dp"/>

    <Button
        android:id="@+id/btnAsyncGet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送异步GET请求"
        android:layout_below="@id/btnSyncGet"
        android:layout_marginTop="20dp"/>

    <Button
        android:id="@+id/btnSyncPost"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送同步POST请求"
        android:layout_below="@id/btnAsyncGet"
        android:layout_marginTop="20dp"/>

    <Button
        android:id="@+id/btnAsyncPost"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送异步POST请求"
        android:layout_below="@id/btnSyncPost"
        android:layout_marginTop="20dp"/>

</RelativeLayout>

预览截图:

4.2、MainActivity实体类

完整代码:

java 复制代码
package com.example.okhttp;

import android.os.Bundle;
import android.widget.Button;

import androidx.appcompat.app.AppCompatActivity;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    private OkHttpClient client = new OkHttpClient();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btnSyncGet = findViewById(R.id.btnSyncGet);
        Button btnAsyncGet = findViewById(R.id.btnAsyncGet);
        Button btnSyncPost = findViewById(R.id.btnSyncPost);
        Button btnAsyncPost = findViewById(R.id.btnAsyncPost);

        btnSyncGet.setOnClickListener(v -> {
            // 发送同步GET请求
            new Thread(() -> {
                Request request = new Request.Builder()
                        .url("https://www.httpbin.org/get?key=1&value=2")
                        .build();

                try {
                    Response response = client.newCall(request).execute();
                    String responseData = response.body().string();
                    System.out.println(responseData);
                    // 处理返回的数据
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }).start();
        });

        btnAsyncGet.setOnClickListener(v -> {
            // 发送异步GET请求
            Request request = new Request.Builder()
                    .url("https://www.httpbin.org/get?key=1&value=2")
                    .build();

            client.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    e.printStackTrace();
                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    String responseData = response.body().string();
                    System.out.println(responseData);
                    // 处理返回的数据
                }
            });
        });

        btnSyncPost.setOnClickListener(v -> {
            // 发送同步POST请求
            new Thread(() -> {

                RequestBody requestBody = new FormBody.Builder()
                        // 添加POST请求参数
                        .add("key","1")
                        .add("value","2")
                        .build();

                Request request = new Request.Builder()
                        .url("https://www.httpbin.org/post")
                        .post(requestBody)
                        .build();

                try {
                    Response response = client.newCall(request).execute();
                    String responseData = response.body().string();
                    System.out.println(responseData);
                    // 处理返回的数据
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }).start();
        });

        btnAsyncPost.setOnClickListener(v -> {

            // 构建JSON数据字符串
            String json = "{\"key\": \"1\", \"value\": \"2\"}";

            // 创建RequestBody
            RequestBody requestBody = RequestBody.create(
                    MediaType.parse("application/json"), json);


            Request request = new Request.Builder()
                    .url("https://www.httpbin.org/post")
                    .post(requestBody)
                    .build();

            client.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    e.printStackTrace();
                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    String responseData = response.body().string();
                    System.out.println(responseData);
                }
            });
        });
    }
}

五、Gitee源码

源码自取:Android Studio整合okhttp发送同步/异步get和同步/异步post请求

相关推荐
又见情义1 小时前
RK3568 + RTL8211F 网络唤醒(WOL)功能适配全记录
android·网络·驱动开发
用户0934077735141 小时前
HarmonyOS WPS Open SDK 实践:registerApp 鉴权与就绪门禁
android·typescript·harmonyos
jike_20261 小时前
会议离线录音APP:无网络记录能力对比
android·智能手机·语音识别
always_TT2 小时前
【Python 字符串格式化:format() 方法】
android·开发语言·python
恋猫de小郭2 小时前
AI 时代,一个优化 Flutter 的重复代码工具 Deslop
android·前端·flutter
RisunJan2 小时前
Android 面试知识点整理
android·面试·职场和发展
脚踏实地,坚持不懈!3 小时前
Android ANR 内核底层全解析:从一次触摸到“应用无响应”
android·linux
xhBruce3 小时前
强制使用桌面模式 - SECONDARY_HOME -android-15.0.0_r23
android·launcher3
_祝你今天愉快14 小时前
从驱动来分析服务的添加过程
android
Dovis(誓平步青云)17 小时前
折叠屏悬停看视频,上半屏和下半屏应该各做什么
android·java·服务器·开发语言·安全·音视频