详细介绍:鸿蒙中的 HTTP 网络通信与 RESTful API 调用

大家好,我是[晚风依旧似温柔],新人一枚,欢迎大家关注~

概述:如何在鸿蒙应用中进行 HTTP 网络通信

在现代应用开发中,网络通信已成为获取远程数据和服务的重要手段。通过 HTTP 协议,我们可以向服务器发送请求,获取响应数据,并在应用中进行相应处理。RESTful API 是现代 Web 开发中常见的一种 API 架构风格,通过 HTTP 请求方式(如 GET、POST、PUT、DELETE)来操作资源,并返回 JSON 格式的数据。

在鸿蒙操作系统中,开发者可以使用 HttpURLConnection 类进行 HTTP 网络通信,通过发送 GETPOST 请求来与服务器进行交互。通过处理返回的 JSON 数据和错误,我们可以实现与远程 API 的有效通信。

本篇文章将介绍如何在鸿蒙中使用 HttpURLConnection 发送 HTTP 请求,如何进行 GET 和 POST 请求的调用,以及如何处理响应和错误,最后解析返回的 JSON 数据。

使用 HttpURLConnection 发送请求

HttpURLConnection 是 Java 提供的用于 HTTP 网络通信的类,它支持发送 HTTP 请求和接收响应。我们可以使用它来发送 GET、POST 请求,设置请求头,处理响应数据等。

1. 发送 GET 请求

GET 请求用于从服务器获取资源。在鸿蒙应用中,可以通过 HttpURLConnection 来实现 GET 请求的发送。

示例:发送 GET 请求
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class GetRequestExample
{
public static void sendGetRequest(String urlString) {
try {
// 创建 URL 对象
URL url = new URL(urlString);
// 打开连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
// 设置请求方法为 GET
connection.setConnectTimeout(5000);
// 设置连接超时时间
connection.setReadTimeout(5000);
// 设置读取超时时间
// 获取响应码
int responseCode = connection.getResponseCode();
System.out.println("GET Response Code: " + responseCode);
// 读取响应数据
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println("Response: " + response.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
sendGetRequest("https://jsonplaceholder.typicode.com/posts/1");
}
}

代码解释:

  • 通过 URLHttpURLConnection 创建一个 GET 请求连接。
  • 设置连接超时和读取超时。
  • 获取服务器响应码,并读取响应内容。
  • BufferedReader 用于读取返回的输入流,将响应数据拼接成字符串输出。

2. 发送 POST 请求

POST 请求用于向服务器提交数据,通常用于提交表单数据、上传文件等。在鸿蒙应用中,发送 POST 请求的步骤与 GET 请求类似,只不过需要设置请求体并进行数据发送。

示例:发送 POST 请求
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class PostRequestExample
{
public static void sendPostRequest(String urlString, String jsonData) {
try {
// 创建 URL 对象
URL url = new URL(urlString);
// 打开连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
// 设置请求方法为 POST
connection.setRequestProperty("Content-Type", "application/json");
// 设置请求头
connection.setDoOutput(true);
// 启用输出流,以便发送请求体数据
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
// 发送请求数据
OutputStream os = connection.getOutputStream();
os.write(jsonData.getBytes());
os.flush();
os.close();
// 获取响应码
int responseCode = connection.getResponseCode();
System.out.println("POST Response Code: " + responseCode);
// 读取响应数据
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println("Response: " + response.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String jsonData = "{\"title\":\"foo\", \"body\":\"bar\", \"userId\":1}";
sendPostRequest("https://jsonplaceholder.typicode.com/posts", jsonData);
}
}

代码解释:

  • 设置请求方法为 POST,并设置请求头 Content-Typeapplication/json
  • 使用 OutputStream 向请求体中写入 JSON 数据。
  • 发送请求后,读取返回的响应数据,并输出到控制台。

处理响应和错误

在发送 HTTP 请求时,可能会遇到各种异常和错误情况,如网络连接失败、服务器响应异常等。为了保证应用的健壮性,需要在代码中处理可能的错误并给予相应的反馈。

1. 处理 HTTP 错误响应

可以通过 getResponseCode() 获取 HTTP 响应码,并根据响应码来处理不同的错误。

示例:处理 HTTP 错误响应
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
// 处理成功响应
System.out.println("Request successful.");
} else if (responseCode == HttpURLConnection.HTTP_NOT_FOUND) {
// 处理 404 错误
System.out.println("Error: Resource not found.");
} else {
// 处理其他错误
System.out.println("Error: " + responseCode);
}

2. 解析返回的 JSON 数据并处理错误

大多数 API 返回的数据是 JSON 格式,鸿蒙支持通过 JSON 解析库 来解析这些数据,并进行相应的处理。

示例:解析 JSON 数据
import org.json.JSONObject;
public class JsonResponseParser
{
public static void parseJsonResponse(String response) {
try {
// 解析 JSON 响应
JSONObject jsonObject = new JSONObject(response);
System.out.println("ID: " + jsonObject.getInt("id"));
System.out.println("Title: " + jsonObject.getString("title"));
System.out.println("Body: " + jsonObject.getString("body"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String jsonResponse = "{\"id\":1, \"title\":\"foo\", \"body\":\"bar\"}";
parseJsonResponse(jsonResponse);
}
}

代码解释:

  • 使用 JSONObject 解析返回的 JSON 字符串。
  • 通过 getInt()getString() 获取 JSON 数据中的字段。

代码示例:实现 API 请求和响应处理

以下是一个完整的鸿蒙应用示例,展示了如何通过 HttpURLConnection 发送 GET 和 POST 请求,处理响应数据,并解析返回的 JSON。

示例:鸿蒙应用中的 API 请求与响应处理

import ohos.aafwk.ability.AbilitySlice;
import ohos.agp.components.Text;
import ohos.app.Context;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class ApiRequestExample
extends AbilitySlice {
private Text textView;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
setUIContent(ResourceTable.Layout_ability_api_request);
textView = (Text) findComponentById(ResourceTable.Id_text_view);
// 发送 GET 请求
sendGetRequest("https://jsonplaceholder.typicode.com/posts/1");
}
private void sendGetRequest(String urlString) {
new Thread(() ->
{
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// 解析 JSON 响应
parseJsonResponse(response.toString());
} else {
textView.setText("Error: " + responseCode);
}
} catch (Exception e) {
e.printStackTrace();
textView.setText("Network Error");
}
}).start();
}
private void parseJsonResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
String title = jsonObject.getString("title");
String body = jsonObject.getString("body");
// 更新 UI 线程显示结果
textView.post(() -> textView.setText("Title: " + title + "\nBody: " + body));
} catch (Exception e) {
e.printStackTrace();
}
}
}

代码解释:

  • 通过 HttpURLConnection 发送 GET 请求。
  • 当响应返回成功时,解析 JSON 数据并更新 UI 显示。
  • 使用 post() 方法在 UI 线程中更新视图,因为网络请求是在子线程中进行的。

小结

在鸿蒙应用中,HTTP 网络通信和 RESTful API 调用是与远程服务器进行交互的基础。通过使用 HttpURLConnection,开发者可以轻松实现 GET 和 POST 请求,处理响应数据,并进行 JSON 解析。

  • GET 请求 用于从服务器获取数据,适用于查询操作。
  • POST 请求 用于向服务器发送数据,适用于提交表单、上传数据等操作。
  • JSON 解析 用于处理服务器返回的 JSON 数据,提取和展示相关信息。

通过这些操作,鸿蒙应用能够与服务器进行高效的通信,为用户提供动态内容和交互功能。

如果觉得有帮助,别忘了点个赞+关注支持一下~
喜欢记得关注,别让好内容被埋没~

posted @ 2025-08-09 11:53  yfceshi  阅读(52)  评论(0)    收藏  举报