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技术站