19 网络访问之Http请求

在前一章中,我们讨论了如何使用 Room 数据库在 Android 应用程序中进行数据存储。如今,大多数应用需要与网络进行交互,因此在本章中,我们将学习如何使用 Http 请求进行网络访问。这一部分将帮助你理解如何从远程服务器获取数据,以及如何处理这些数据。

理解HTTP请求

HTTP(超文本传输协议)是客户端(通常是应用程序)与服务器之间通信的协议。HTTP 请求主要包括以下几种类型:

  • GET:从服务器获取数据。
  • POST:向服务器发送数据。
  • PUT:更新服务器上的数据。
  • DELETE:删除服务器上的数据。

使用HttpURLConnection进行GET请求

在 Android 中,有多种方法可以进行 Http 请求。最基础的方法是使用 HttpURLConnection。下面是一个简单的 GET 请求示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public String makeGetRequest(String urlString) {
HttpURLConnection urlConnection = null;
BufferedReader reader = null;

try {
URL url = new URL(urlString);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();

// 检查响应码
int responseCode = urlConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream inputStream = urlConnection.getInputStream();
reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line).append('\n');
}
return stringBuilder.toString();
} else {
return "Error: " + responseCode;
}
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

上面的代码通过 HttpURLConnection 从指定的 urlString 地址获取数据。这种方式虽然能工作,但并不推荐在生产环境中使用,因为它的实现比较复杂,且易于出错。

使用OkHttp库进行网络请求

为了简化 HTTP 请求的处理,许多开发者选择使用第三方库,比如 OkHttpOkHttp 是一个高效的 HTTP & HTTP/2 客户端,最重要的特点是它简化了 Http 请求的实现。

示例:使用OkHttp进行GET请求

首先,在你的 build.gradle 文件中添加 OkHttp 的依赖:

1
implementation 'com.squareup.okhttp3:okhttp:4.9.0'

然后,你可以使用以下代码进行 GET 请求:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
OkHttpClient client = new OkHttpClient();

public void makeGetRequest(String url) {
Request request = new Request.Builder()
.url(url)
.build();

client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}

@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
final String responseData = response.body().string();
// 在UI线程上更新界面
runOnUiThread(new Runnable() {
@Override
public void run() {
// 处理响应数据
Log.d("Response", responseData);
}
});
}
}
});
}

通过 OkHttp,我们可以轻松地发送 GET 请求,并且在响应回来时,通过回调处理结果。作为一个开发者,不需要手动处理线程,因为 OkHttp 会为我们做这件事情。

处理JSON数据

当你发送请求并得到响应时,通常会获得 JSON 格式的数据。这时你需要使用一些库来解析 JSON 数据,比如 Gson 或者 Moshi

示例:使用Gson解析JSON

首先,确保在 build.gradle 中添加 Gson 的依赖:

1
implementation 'com.google.code.gson:gson:2.8.6'

然后,我们可以将 JSON 数据解析为 Java 对象:

1
2
3
4
5
6
7
8
9
10
11
12
public class User {
private String name;
private int age;

// Getter & Setter
}

public void parseJson(String jsonData) {
Gson gson = new Gson();
User user = gson.fromJson(jsonData, User.class);
Log.d("User Name", user.getName());
}

小结

在本章中,我们介绍了如何使用 Http 请求与服务器进行通信,包括使用 HttpURLConnection 进行基本的 GET 请求,及使用 OkHttp 库简化网络请求。此外,我们还引入了 Gson 来处理响应的 JSON 数据。

在下一个章节中,我们将进一步深入,学习如何使用 Retrofit 这个强大的库来简化我们的网络请求方式。使用 Retrofit,你将能够以更简洁的方式处理复杂的网络交互。

请保持关注!

19 网络访问之Http请求

https://zglg.work/android-app-dev/19/

作者

IT教程网(郭震)

发布于

2024-08-14

更新于

2024-08-15

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论