Android通过HttpURLConnection和HttpClient接口实现网络编程

yizhihongxing

Android通过HttpURLConnection和HttpClient接口实现网络编程

Android平台提供了两种网络编程接口:HttpURLConnection和HttpClient。使用它们可以很容易地进行网络通信,发送请求,接收和解析服务器的响应。

HttpURLConnection接口

HttpURLConnection是Android平台中的标准网络编程接口,支持HTTP协议的各种请求方式。这里我们介绍如何使用HttpURLConnection发送GET和POST请求。

发送GET请求

URL url = new URL("http://www.example.com/api");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
    InputStream inputStream = new BufferedInputStream(conn.getInputStream());
    String response = convertStreamToString(inputStream);
    // 处理响应
}
conn.disconnect();

上面的代码中,我们首先创建一个URL对象,用于指定要请求的URL,然后通过URL对象获取HttpURLConnection实例,并设置请求方式为GET。接下来,设置请求头信息,这里我们设置了Accept为application/json,表示接收的是JSON格式的响应数据。如果请求成功,我们将获得一个InputStream对象,将它转换为字符串,然后处理响应数据。最后,关闭连接。

发送POST请求

URL url = new URL("http://www.example.com/api");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Accept", "application/json");
conn.setDoOutput(true); // 设置为true,表示允许输出数据
JSONObject json = new JSONObject();
json.put("name", "John");
json.put("age", 30);
OutputStream os = conn.getOutputStream();
os.write(json.toString().getBytes());
// 接收响应
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
    InputStream inputStream = new BufferedInputStream(conn.getInputStream());
    String response = convertStreamToString(inputStream);
    // 处理响应
}
conn.disconnect();

上面的代码中,我们依然是先创建URL对象,然后通过URL对象获取HttpURLConnection实例,并设置请求方式为POST。接下来,设置请求头信息,这里我们设置了Content-Type为application/json,表示发送的数据是JSON格式的,同时也设置了Accept为application/json。

开启DoOutput选项,表示允许发送数据,我们发送的数据是一个JSON对象,其中包含了一个"name"和一个"age"属性。发送JSON数据时,我们需要将它转换为字符串形式,然后将其输出到OutputStream对象中。

如果请求成功,我们将获得一个InputStream对象,将它转换为字符串,然后处理响应数据。最后,关闭连接。

HttpClient接口

HttpClient是Android平台中的另一个网络编程接口,支持HTTP协议的各种请求方式,并且比HttpURLConnection更加灵活。这里我们介绍如何使用HttpClient发送GET和POST请求。

首先,我们需要在项目中添加Apache HttpClient库。将以下的依赖添加到项目的 build.gradle 文件中即可。

dependencies {
    implementation 'org.apache.httpcomponents:httpclient:4.5.12'
}

发送GET请求

HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet("http://www.example.com/api");
HttpResponse response = httpclient.execute(httpget);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    HttpEntity entity = response.getEntity();
    String json = EntityUtils.toString(entity, "utf-8");
    // 处理响应
    EntityUtils.consume(entity); // 关闭实体流
}

上面的代码中,我们创建了一个HttpClient实例,以及一个HttpGet请求实例,并通过HttpClient的execute方法发送请求。如果请求成功,我们将获得一个HttpResponse实例,从中获取响应的状态码和响应实体。将响应实体转换为字符串,然后处理响应数据。最后,关闭实体流。

发送POST请求

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.example.com/api");
httppost.setHeader("Content-Type", "application/json");
httppost.setHeader("Accept", "application/json");
JSONObject json = new JSONObject();
json.put("name", "John");
json.put("age", 30);
StringEntity se = new StringEntity(json.toString(), "utf-8");
httppost.setEntity(se);
HttpResponse response = httpclient.execute(httppost);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    HttpEntity entity = response.getEntity();
    String json = EntityUtils.toString(entity, "utf-8");
    // 处理响应
    EntityUtils.consume(entity); // 关闭实体流
}

上面的代码中,我们创建了一个HttpClient实例,以及一个HttpPost请求实例,并设置请求头信息。然后,创建一个JSON对象,将"name"和"age"属性添加进去,将其转换为字符串形式,并创建一个StringEntity实例。设置到请求实例中。

与get请求不同的是,需要将请求实例的实体设置为对应的值(即Se)。最后执行请求以及处理响应的代码与GET请求相似。我们关闭实体流,以释放资源。

这就完成了Android通过HttpURLConnection和HttpClient接口实现网络编程的攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android通过HttpURLConnection和HttpClient接口实现网络编程 - Python技术站

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

相关文章

  • Java实现简单图形界面计算器

    来一份详细的“Java实现简单图形界面计算器”的攻略吧。 一、概述 本攻略将带领读者用Java实现一个简单的图形界面计算器。主要用到的技术是Swing,一个Java提供的GUI工具包。通过这个攻略,读者将了解到如何使用Swing快速完成一个图形界面程序的开发。 二、实现步骤 创建项目 首先,我们需要创建一个Java项目。可以使用Eclipse/IDEA等开发…

    Java 2023年5月19日
    00
  • 实例讲解Java的Spring框架中的AOP实现

    实例讲解Java的Spring框架中的AOP实现 什么是AOP? AOP(Aspect-oriented programming)面向切面编程,是一种新的编程思想,它通过定义切面(Aspect)来装配系统,一个切面横切整个系统中的多个点,切面可以通过切点(PointCut)和通知(Advice)来定义在何处以及何时执行程序代码,从而达到复用和降低系统复杂度的…

    Java 2023年5月19日
    00
  • Spring内置任务调度如何实现添加、取消与重置详解

    下面我来简单介绍一下Spring内置的任务调度的添加、取消与重置详解。 1. 添加任务 Spring内置的任务调度通过使用TaskScheduler和CronTask对象来完成任务的调度。下面是添加任务的步骤: 首先,在Spring的配置文件中配置一个TaskScheduler对象。可以使用ThreadPoolTaskScheduler或者Concurren…

    Java 2023年6月15日
    00
  • Java8 Instant 时间戳实例讲解

    Java8 Instant 时间戳实例讲解 在 Java8 中,引入了 java.time 包,包含了一系列新的日期时间 API,其中 Instant 类可以用来表示时间戳。本文将详细讲解 Instant 类的使用。 Instant 类概述 Instant 类是不可变且线程安全的,它以 Unix 时间戳的形式存储时间,精确到纳秒。Unix 时间戳是指从 19…

    Java 2023年5月20日
    00
  • Spring Security权限想要细化到按钮实现示例

    为了实现Spring Security权限细化到按钮级别的权限控制,需要经过以下几个步骤: 步骤1,配置Spring Security 在Spring Security的配置中添加按钮级别的权限控制。 @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSec…

    Java 2023年5月20日
    00
  • 使用vscode搭建javaweb项目的详细步骤

    下面是使用VSCode搭建JavaWeb项目的详细步骤。 步骤一:安装必要的插件 在VsCode的扩展中心搜索Java Extension Pack并安装。它包含了多个必要的插件,如 Java Language Support、Debugger for Java 等。 步骤二:创建Maven项目 安装Maven。安装完成后在命令行中输入 mvn -versi…

    Java 2023年5月26日
    00
  • Java中的Struts2框架拦截器之实例代码

    接下来我将为你详细讲解如何进行Java中的Struts2框架拦截器之实例代码操作攻略。 什么是Struts2框架拦截器 Struts2是一个基于MVC设计模式的Web框架,而拦截器是Struts2中较为重要的一部分。拦截器可以在Action被执行之前和之后做一些业务处理,例如权限控制、异常处理、日志记录等。 Struts2框架拦截器的使用步骤 1. 创建一个…

    Java 2023年5月20日
    00
  • Spring security登录过程逻辑详解

    我将详细讲解“Spring security登录过程逻辑详解”的攻略。具体内容如下: 标题 Spring security登录过程逻辑详解 介绍 Spring Security是基于Spring的安全框架,提供了认证和授权的功能,是保障应用系统安全的重要组成部分。本文将详细介绍Spring Security的登录过程,并结合代码示例进行演示。 正文 Spri…

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