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

下面我将为你详细讲解“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详解

基础教程推荐