Android发送GET与POST请求的DEMO详解

下面我将为你详细讲解“Android发送GET与POST请求的DEMO详解”这个主题,包括以下几个方面的内容:

  1. 什么是HTTP请求
  2. Android中发送HTTP请求的方式
  3. 完整示例:Android发送GET请求
  4. 完整示例:Android发送POST请求

什么是HTTP请求

HTTP(HyperText Transfer Protocol)是一种用于传输数据的协议,常用于万维网(WWW)上数据的传输。HTTP协议定义了浏览器和万维网服务器之间进行通信的规则,使得万维网能够进行通信和数据传输。

HTTP请求是指浏览器向服务器发出请求的过程,常用的请求方法有GET和POST。GET请求用于向服务器请求一份资源,并将其传输到客户端;POST请求则通常是向服务器提交表单数据,用于做数据的处理。

Android中发送HTTP请求的方式

在Android开发中,发送HTTP请求通常使用HttpURLConnection或HttpClient库,这些库都是Android SDK中自带的网络库。其中,HttpURLConnection具有简单易用、轻量级等特点,而HttpClient库则表现出更强大的定制性和兼容性。需要注意的是,从Android 6.0(API Level 23)开始,Android SDK已经不再推荐使用HttpClient库,所以我们在这里选择使用HttpURLConnection库进行示例介绍。

完整示例:Android发送GET请求

以下示例代码通过HttpURLConnection获取一个API的JSON数据,并使用Logcat将结果输出到控制台。

public class MainActivity extends AppCompatActivity {

    private static final String API_URL = "https://api.github.com/";

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

        // 创建新线程,发送GET请求
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    URL url = new URL(API_URL);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(5000);

                    // 读取响应
                    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                    StringBuilder response = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        response.append(line);
                    }
                    reader.close();

                    // 将响应结果输出到控制台
                    Log.d("MainActivity", "Response: " + response.toString());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

说明:

  1. 在主线程中无法进行网络请求操作,需要将网络请求操作放在新线程中;
  2. 通过URL类创建一个URL对象,传入API的URL地址;
  3. 调用openConnection()方法返回一个URLConnection对象;
  4. 将URLConnection强制转换为HttpURLConnection,以方便对HTTP请求进行配置;
  5. 设置HTTP请求方式为GET;
  6. 设置超时时间为5秒;
  7. 读取响应结果;
  8. 将响应结果转换为String类型,并通过Logcat输出。

完整示例:Android发送POST请求

以下示例代码通过HttpURLConnection向服务器提交表单数据,获取服务器响应的结果,并使用Logcat将结果输出到控制台。其中,我们使用了一个PHP脚本作为后台处理程序示例。

  1. PHP脚本代码:
<?php
    $username = $_POST["username"];
    $password = $_POST["password"];
    echo "username: " . $username . ", password: " . $password;
?>
  1. Android代码:
public class MainActivity extends AppCompatActivity {

    private static final String API_URL = "https://example.com/login.php";

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

        // 创建新线程,发送POST请求
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    URL url = new URL(API_URL);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("POST");
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(5000);

                    // 构造请求体
                    String params = "username=admin&password=123456";
                    byte[] postData = params.getBytes("UTF-8");
                    int postDataLength = postData.length;

                    // 设置请求头
                    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                    connection.setRequestProperty("Content-Length", Integer.toString(postDataLength));

                    // 写入请求体
                    connection.setDoOutput(true);
                    DataOutputStream out = new DataOutputStream(connection.getOutputStream());
                    out.write(postData);
                    out.flush();
                    out.close();

                    // 读取响应
                    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                    StringBuilder response = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        response.append(line);
                    }
                    reader.close();

                    // 将响应结果输出到控制台
                    Log.d("MainActivity", "Response: " + response.toString());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

说明:

  1. 通过URL类创建一个URL对象,传入API的URL地址;
  2. 调用openConnection()方法返回一个URLConnection对象;
  3. 将URLConnection强制转换为HttpURLConnection,以方便对HTTP请求进行配置;
  4. 设置HTTP请求方式为POST;
  5. 设置超时时间为5秒;
  6. 构造请求体(params);
  7. 将请求体转换为字节数组(postData);
  8. 获取请求体长度并设置请求头(Content-TypeContent-Length);
  9. 打开输出流,并将请求体写入输出流,然后关闭流;
  10. 读取响应结果;
  11. 将响应结果转换为String类型,并通过Logcat输出。

以上就是关于“Android发送GET与POST请求的DEMO详解”的完整攻略及示例说明,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android发送GET与POST请求的DEMO详解 - Python技术站

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

相关文章

  • docker inspect 操作详解

    “docker inspect”命令用于获取Docker容器、镜像或其他相关对象的详细信息。以下是“docker inspect”的详细操作攻略。 1. 命令格式 Docker命令通常采用以下格式: docker inspect [OPTIONS] NAME|ID [NAME|ID…] 其中,OPTIONS是可选参数,NAME|ID是Docker对象的名…

    Java 2023年6月15日
    00
  • Java日常练习题,每天进步一点点(32)

    首先我们需要了解这个题目的基本信息,可以看到这是“Java日常练习题,每天进步一点点”系列中的第32题,很有可能是一道适合初学者的小练习,能够帮助我们巩固一些Java基础知识和编程技巧。 在开始解答之前,我们需要明确这道题目的要求和背景信息。以下是题目的原始描述: 「题目描述」给你一个字符串 s 和一个非负整数 k,请你找出 s 中的最长子串,要求该子串中的…

    Java 2023年5月20日
    00
  • springmvc+spring+mybatis实现用户登录功能(上)

    我会详细讲解“springmvc+spring+mybatis实现用户登录功能(上)”的完整攻略。 首先,我们需要明确一下这个项目所需的技术栈: Spring MVC:用于实现Web应用程序的MVC架构,处理用户请求和响应的分发和转发。 Spring:用于管理和组织应用中的Bean,提供依赖注入和面向切面编程等功能。 MyBatis:用于操作数据库,提供了较…

    Java 2023年5月16日
    00
  • Java异常处理中的try-with-resources语句如何使用?

    Java异常处理中的try-with-resources语句是一种方便且高效的方式来自动管理资源确保它们被正确关闭以释放系统资源。该语句可用于处理带有closable接口的资源对象和实现了AutoCloseable接口的资源对象。 基本语法如下: try (资源初始化语句; 资源初始化语句 …) { // 可能抛出异常的代码区域 } catch (异常类…

    Java 2023年4月27日
    00
  • SpringBoot整合log4j日志与HashMap的底层原理解析

    SpringBoot整合log4j日志与HashMap的底层原理解析 1. 准备工作 在开始整合log4j日志与HashMap之前,需要先完成以下准备工作: 确保已经安装好相应版本的jdk、Maven工具和SpringBoot框架。 创建一个空的SpringBoot应用程序,可以使用Spring Initializr等工具或者手动创建项目。 2. 添加依赖 …

    Java 2023年5月20日
    00
  • Spring Cloud 中@FeignClient注解中的contextId属性详解

    当我们使用Spring Cloud中的FeignClient进行服务间调用时,我们可以在@FeignClient注解中,定义contextId属性,用于指定当前FeignClient的contextId,以便区分不同的FeignClient实例。 具体来说,contextId属性的作用有如下两个: 当我们使用了相同FeignClient接口的多个实例时,使用…

    Java 2023年5月31日
    00
  • Java语言求解完美数代码分析

    Java语言求解完美数的代码分析是一项需要进行详细步骤解释的工作,下面是完整攻略: 1. 什么是完美数 完美数是指它所有的真因子之和(即除去本身的约数之外)恰好等于它本身的正整数,例如:{6, 28, 496, 8128}。 2. 完美数的求解 完美数的求解可以通过以下步骤实现: 2.1 找到所有的因子 因子是指能够整除目标数的数,可以通过以下代码实现: p…

    Java 2023年5月19日
    00
  • JDBC连接Access数据库的几种方式介绍

    下面我将为您详细介绍JDBC连接Access数据库的几种方式。 一、JDBC-ODBC桥连接 JDBC-ODBC桥连接是最常见的连接Access数据库的方式,它通过将Java程序中的JDBC调用转换为ODBC调用来实现与Access数据库的连接。 步骤: 在Windows中打开ODBC数据源管理器,添加一个Access数据库数据源。 在Java代码中使用JD…

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