在前一章中,我们讨论了如何使用 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
请求的处理,许多开发者选择使用第三方库,比如 OkHttp
。OkHttp
是一个高效的 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(); 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;
}
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
,你将能够以更简洁的方式处理复杂的网络交互。
请保持关注!