19 网络访问之Http请求
在前一章中,我们讨论了如何使用 Room
数据库在 Android 应用程序中进行数据存储。如今,大多数应用需要与网络进行交互,因此在本章中,我们将学习如何使用 Http
请求进行网络访问。这一部分将帮助你理解如何从远程服务器获取数据,以及如何处理这些数据。
理解HTTP请求
HTTP
(超文本传输协议)是客户端(通常是应用程序)与服务器之间通信的协议。HTTP
请求主要包括以下几种类型:
GET
:从服务器获取数据。POST
:向服务器发送数据。PUT
:更新服务器上的数据。DELETE
:删除服务器上的数据。
使用HttpURLConnection进行GET请求
在 Android 中,有多种方法可以进行 Http
请求。最基础的方法是使用 HttpURLConnection
。下面是一个简单的 GET
请求示例。
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
请求的处理,许多开发者选择使用第三方库,比如 OkHttp
。OkHttp
是一个高效的 HTTP
& HTTP/2
客户端,最重要的特点是它简化了 Http
请求的实现。
示例:使用OkHttp进行GET请求
首先,在你的 build.gradle
文件中添加 OkHttp
的依赖:
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
然后,你可以使用以下代码进行 GET
请求:
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
的依赖:
implementation 'com.google.code.gson:gson:2.8.6'
然后,我们可以将 JSON
数据解析为 Java 对象:
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
,你将能够以更简洁的方式处理复杂的网络交互。
请保持关注!