【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中添加如下依赖:

implementation 'com.squareup.okhttp3:okhttp:3.5.0'

如图所示:

二、开启外网访问权限

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

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

如图所示:

三、发送请求

先定义一个全局变量:

private OkHttpClient client = new OkHttpClient();

3.1、发送同步get请求

关键代码:

// 发送同步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请求

关键代码:

// 发送异步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请求

关键代码:

// 发送同步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请求 

关键代码:

// 构建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 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实体类

完整代码:

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. 使用axios发送getpost请求

    2024-07-17 07:02:04       59 阅读
  2. GETPOST请求

    2024-07-17 07:02:04       59 阅读
  3. Python requests getpost方法发送HTTP请求

    2024-07-17 07:02:04       60 阅读
  4. curl命令行发送post/get请求

    2024-07-17 07:02:04       23 阅读
  5. C#后台发送GetPost请求的几种方法总结

    2024-07-17 07:02:04       52 阅读
  6. 封装PHP用于发送GETPOST请求的公共方法

    2024-07-17 07:02:04       29 阅读
  7. GET POST 请求方式的区别

    2024-07-17 07:02:04       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 07:02:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 07:02:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 07:02:04       58 阅读
  4. Python语言-面向对象

    2024-07-17 07:02:04       69 阅读

热门阅读

  1. std::env是什么库?|Python一对一教学答疑

    2024-07-17 07:02:04       20 阅读
  2. ubuntu系统Docker常用命令

    2024-07-17 07:02:04       22 阅读
  3. Web前端-Web开发HTML基础2-list

    2024-07-17 07:02:04       25 阅读
  4. Qt中qApp简单介绍

    2024-07-17 07:02:04       27 阅读
  5. 2407-mysql笔记

    2024-07-17 07:02:04       19 阅读
  6. opencv—常用函数学习_“干货“_10

    2024-07-17 07:02:04       32 阅读