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

下面就为您详细讲解一下“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日

相关文章

  • spring中bean的生命周期详解

    这里给出 “spring中bean的生命周期详解” 的完整攻略: 什么是Bean的生命周期? 在 Spring 中,当一个 Bean 被创建出来并可以被容器使用时,会经历以下几个状态,这些状态构成了一个 Bean 的生命周期: Bean 的实例化 Bean 的属性设置 Bean 的初始化 Bean 的销毁 下面我们来详细讲解每个状态。 Bean 的实例化 在…

    other 2023年6月27日
    00
  • 如何才能彻底删除数据?如何删除数据才是最保险最不怕被恢复

    如何彻底删除数据的完整攻略 1. 使用安全删除工具 使用专门的安全删除工具可以确保数据被彻底删除,不容易被恢复。以下是一些常用的安全删除工具: Eraser:适用于Windows系统的开源工具,可以安全删除文件和文件夹。 BleachBit:适用于Windows和Linux系统的开源工具,可以安全删除文件、清理磁盘空间和保护隐私。 Secure Eraser…

    other 2023年10月18日
    00
  • 基于Java语言实现Socket通信的实例

    关于“基于Java语言实现Socket通信的实例”的攻略,下面会提供详细的步骤以及示例说明。 目录 简介 环境搭建 编写客户端 编写服务器端 示例说明 总结 简介 Socket(套接字)是一种用于在不同程序之间传递数据的机制。在Java中,可以通过java.net.Socket类实现Socket通信,建立服务器和客户端之间的连接。在这个攻略中,我们将会演示如…

    other 2023年6月27日
    00
  • 苹果手机内存空间不足怎么清理

    苹果手机内存空间不足清理攻略 苹果手机内存空间不足可能会导致手机运行缓慢、应用崩溃等问题。为了解决这个问题,你可以采取以下步骤来清理手机内存空间。 1. 删除不需要的应用 首先,检查你的手机上是否有一些你不再使用或不需要的应用。这些应用可能占据了大量的内存空间。你可以按照以下步骤删除这些应用: 在主屏幕上找到并长按要删除的应用图标。 等到应用图标开始晃动并出…

    other 2023年7月31日
    00
  • 怎样批量修改文件为不同文件名?批量修改文件为不同文件名方法

    要批量修改文件为不同文件名,您可以使用命令行工具或脚本语言。 使用命令行工具 1.使用cp命令复制多个文件并修改文件名 cp old_file1 new_file1 && cp old_file2 new_file2 && cp old_file3 new_file3 使用&&运算符,可以在一个命令行中同时执行…

    other 2023年6月26日
    00
  • DOS命令字典2第2/2页

    DOS命令字典2第2/2页攻略 1. 背景介绍 DOS 命令字典是一份列举了 DOS 命令的参考手册。在使用 DOS 进行命令行操作时,命令字典会帮助你快速查找和学习 DOS 命令的使用方法。 2. 使用步骤 2.1 打开DOS命令字典 在命令行界面下,输入“DOSKEY /MACROFILE=命令字典路径”命令,以载入命令字典。例如: DOSKEY /MA…

    other 2023年6月26日
    00
  • Bootstrap实现带暂停功能的轮播组件(推荐)

    下面是关于“Bootstrap实现带暂停功能的轮播组件(推荐)”的完整攻略: 标准Bootstrap轮播组件 首先,我们先来了解一下标准的Bootstrap轮播组件。Bootstrap是一个流行的前端框架,几乎所有的网站前端开发都会用到。Bootstrap提供了很方便的轮播组件,可以在网站中实现图片轮播、新闻轮播等功能。 HTML代码 需要引入Bootstr…

    other 2023年6月20日
    00
  • while循环的跳出

    while循环的跳出 在编写程序时,我们通常会遇到需要跳出循环的情况。而在Python中,我们可以使用 while 循环结构来实现这一目标。当满足某个条件时,我们可以使用 break 关键字来跳出循环,或使用 continue 来跳过当前循环,直接执行下一次循环。 利用break语句跳出while循环 当满足某个条件时,使用 break 语句可以强制跳出当前…

    其他 2023年3月29日
    00
合作推广
合作推广
分享本页
返回顶部