android实现okHttp的get和post请求的简单封装与使用

yizhihongxing

下面就为您详细讲解一下“android实现okHttp的get和post请求的简单封装与使用”的攻略。

准备工作

在进行okHttp的get和post请求的封装前,需要先在项目的 build.gradle 文件里添加 okHttp 的依赖:

dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.5.0'
}

封装过程

封装Get请求

在进行Get请求的封装前,我们需要先定义一个公共的接口类:

public interface GetDataService {
    @GET("api/data/{type}/{page}/{count}")
    Call<ResponseBody> getData(@Path("type") String type, @Path("page") int page, @Path("count") int count);
}

这个接口类里使用了 @GET 注解来指明这是个 Get 请求,根据路径参数 typepagecount 来获取指定的数据。接下来就是封装 Get 请求的代码:

public class HttpUtil {
    // 封装 Get 请求
    public static void sendGetRequest(String type, int page, int count, Callback callback) {
        // 创建 OkHttpClient 实例
        OkHttpClient client = new OkHttpClient();
        // 计算请求的 Url
        String url = "http://gank.io/" + "api/data/" + type + "/" + page + "/" + count;
        // 创建 Request 实例
        Request request = new Request.Builder().url(url).build();
        // 发送异步 GET 请求
        client.newCall(request).enqueue(callback);
    }
}

这里我们将 Get 请求封装在了 HttpUtilsendGetRequest 方法中,并使用 OkHttp 的 OkHttpClient() 方法来创建实例,计算出请求的 Url,创建 Request 实例,并使用 client.newCall(request).enqueue(callback) 异步发送 GET 请求。需要注意的是,这里我们使用了一个 Callback 类型的参数来处理异步请求的回调结果。

封装 Post 请求

封装 Post 请求的方法其实和 Get 请求并没有太大区别,同样需要先定义一个公共的接口类:

public interface PostDataService {
    @FormUrlEncoded
    @POST("api/post/data")
    Call<ResponseBody> postData(@Field("name") String name, @Field("age") int age);
}

这个接口类里使用了 @POST 注解来指明这是个 Post 请求,并且使用 @FormUrlEncoded@Field 注解来传递两个请求参数 nameage。接下来就是封装 Post 请求的代码:

public class HttpUtil {
    // 封装 Post 请求
    public static void sendPostRequest(String name, int age, Callback callback) {
        // 创建 OkHttpClient 实例
        OkHttpClient client = new OkHttpClient();
        // 创建 FormBody 实例
        FormBody.Builder builder = new FormBody.Builder();
        builder.add("name", name);
        builder.add("age", String.valueOf(age));
        FormBody formBody = builder.build();
        // 创建 Request 实例
        Request request = new Request.Builder().url("http://www.example.com/api/post/data").post(formBody).build();
        // 发送异步 POST 请求
        client.newCall(request).enqueue(callback);
    }
}

这里我们同样将 Post 请求封装在了 HttpUtilsendPostRequest 方法中,并创建一个 FormBody 实例,使用 builder.add("name", name)builder.add("age", String.valueOf(age)) 添加了两个请求参数,然后创建 Request 实例,并使用 client.newCall(request).enqueue(callback) 异步发送 POST 请求。

使用示例

下面是一个 Get 请求的示例,我们在 onCreate() 方法中调用 HttpUtil 类中的 sendGetRequest 方法来发送异步 Get 请求并获取数据:

public class MainActivity extends AppCompatActivity {

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

        HttpUtil.sendGetRequest("Android", 1, 10, 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();
                Log.d("MainActivity", responseData);
            }
        });
    }
}

这里我们传递了三个参数:类型为 "Android",第一页,每页有10条数据。回调函数中的 response.body().string() 方法获取到了请求返回的数据,并打印到了控制台中。

下面是一个 Post 请求的示例,我们同样可以在 onCreate() 方法中调用 HttpUtil 类中的 sendPostRequest 方法来发送异步 Post 请求:

public class MainActivity extends AppCompatActivity {

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

        HttpUtil.sendPostRequest("Tom", 20, 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();
                Log.d("MainActivity", responseData);
            }
        });
    }
}

这里我们传递了两个参数:name 为 "Tom",age 为 20。回调函数中的 response.body().string() 方法同样可以获取到请求返回的数据,并打印到了控制台中。

至此,我们就完成了 okHttp 的 get 和 post 请求的封装以及使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android实现okHttp的get和post请求的简单封装与使用 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • SAP ERP常用表

    SAP ERP常用表的完整攻略 SAP ERP是一款企业资源计划软件,它包含了许多常用的表格,用于存储企业的各种数据。本文将介绍一些常用的SAP ERP表格,以及如何使用它们。 1. MARA表 MARA表是SAP ERP中的一个常用表格,用于存储物料主数据。它包含了物料的基本信息,如物料号、描述、单位、重量、体积等。 示例1:查询物料主数据 我们可以使用S…

    other 2023年5月5日
    00
  • Python如何telnet到网络设备

    当需要通过python来管理网络设备时,可以使用telnet库来建立到设备的telnet连接。下面是Python如何telnet到网络设备的完整攻略: 1. 安装telnet库 首先需要安装Python的telnet库。如果你使用的是Python 2.x版本,那么telnet库已经默认安装。如果你使用的是Python 3.x版本,可以使用下面的pip命令来安…

    other 2023年6月27日
    00
  • Laravel 5+ .env环境配置文件详解

    下面是关于“Laravel 5+ .env环境配置文件详解”的完整攻略: 什么是.env文件 在Laravel 5及以上版本中,.env文件是一个非常重要的配置文件,它可以让你轻松地配置的环境相关的变量。 这样一来,你就不需要在代码中硬编码环境相关的变量了,而是可以在.env文件中进行灵活的配置。这样,在不同的环境中使用相同的代码时就能够通过简单地修改.en…

    other 2023年6月25日
    00
  • 2000-XP-2003操作系统常见问题集锦之日常使用问题

    2000-XP-2003操作系统常见问题集锦之日常使用问题攻略 Microsoft Windows 2000、Windows XP和Windows Server 2003是广泛使用的操作系统,本攻略旨在解决常见的日常使用问题。 1.如何更改计算机名称 进入“系统属性” 点击“计算机名”选项卡 点击“更改”按钮来更改计算机名称。 2.如何启用/禁用系统还原 进…

    other 2023年6月27日
    00
  • 【笔记向】package.jsonmain作用

    当然,我很乐意为您提供有关“package.json中main字段的作用”的完整攻略。以下是详细的步骤和两个示例: 1 package.json中main字段的作用 在Node.js应用程序中,package.json文件是一个重要的文件,它包含了应用程序的元数据和依赖项。其中,main字段是package.json文件中的一个重要字段,它指定了应用程序的入…

    other 2023年5月6日
    00
  • jQuery 实现自动填充邮箱功能(带下拉提示)

    jQuery 实现自动填充邮箱功能(带下拉提示)攻略 简介 自动填充邮箱功能是指在用户输入邮箱前缀时,通过下拉提示的方式提供常见的邮箱后缀选项,方便用户选择并自动填充完整的邮箱地址。这种功能在注册、登录等场景中常见,可以提高用户体验和减少输入错误。 实现步骤 步骤 1: 引入 jQuery 库 首先,确保你的页面中已经引入了 jQuery 库。你可以通过以下…

    other 2023年8月6日
    00
  • python nose测试框架全面介绍四

    Python Nose测试框架全面介绍四 在之前的几篇文章中,我们介绍了Python Nose测试框架的基础使用、插件和插件开发、测试运行器和插件集成等内容。在本篇文章中,我们将继续介绍Python Nose测试框架的其他高级特性,包括测试集成、上下文管理器、并行测试等内容。 测试集成 Python Nose测试框架支持对多个测试文件、测试包和测试目录进行集…

    其他 2023年3月28日
    00
  • c#截取字符串某个字符之后的字符

    当然,我很乐意为您提供有关“C#截取字符串某个字符之后的字符”的完整攻略。以下是详细的步骤和两个示例: 1 C#截取字符串某个字符之后的字符 在C#应用程序中,有时需要截取字符串某个字符之后的字符。以下是截取字符串某个字符之后的字符的方法: 1.1 使用Substring方法 您可以使用C#的Substring方法截取字符串某个字符之后的字符。以下是使用Su…

    other 2023年5月6日
    00
合作推广
合作推广
分享本页
返回顶部