📘 第11章 Android 网络编程(超详细 + 代码示例 + 0基础可学)
📑 本章目录
11.1 通过 HTTP 访问网络
11.1.1 HTTP 简介
HTTP(HyperText Transfer Protocol)是浏览器与服务器通信的协议。
常用请求方式:
| 请求方式 | 作用 |
|---|---|
| GET | 从服务器获取数据 |
| POST | 提交数据给服务器 |
典型访问流程:
-
客户端发起请求
-
服务器处理请求
-
服务器返回数据(如 JSON)
-
客户端解析数据并展示
11.1.2 使用 HttpURLConnection 发起网络请求(最常用)
📌 必须在子线程中访问网络,否则会报错!
📌 示例:GET 请求获取文本内容
new Thread(() -> {
try {
URL url = new URL("https://www.baidu.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
InputStream in = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
Log.d("NET", "服务器响应: " + response);
} catch (Exception e) {
e.printStackTrace();
}
}).start();
11.2 使用 WebView 进行网络开发
11.2.1 使用 WebView 浏览网页
XML 页面
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
加载网页
WebView webView = findViewById(R.id.webView);
webView.loadUrl("https://www.baidu.com");
11.2.2 在 WebView 中执行 HTML
String html = "<h1 style='color:red'>Hello WebView!</h1>";
webView.loadData(html, "text/html", "UTF-8");
11.2.3 设置 WebView 支持 JavaScript
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
11.3 JSON 数据解析
11.3.1 JSON 是什么?
JSON = 一种轻量级数据交换格式。
示例:
{
"name": "苹果",
"price": 3.5,
"count": 10
}
11.3.2 Android 中常用 JSON 解析方法
方法1:使用 org.json(最常用)
String json = "{\"name\":\"苹果\", \"price\":3.5}";
JSONObject obj = new JSONObject(json);
String name = obj.getString("name");
double price = obj.getDouble("price");
Log.d("JSON", "name=" + name + ", price=" + price);
11.4 实战演练------------商品砍价界面
下面我们模拟一个砍价界面,需要从服务器获取商品价格,然后用户点击按钮进行"砍一刀"。
1️⃣ 设计界面(activity_main.xml)
<LinearLayout
android:orientation="vertical"
android:gravity="center"
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tvPrice"
android:text="当前价格:加载中..."
android:textSize="22sp"
android:layout_marginBottom="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btnCut"
android:text="砍一刀"
android:layout_width="200dp"
android:layout_height="wrap_content"/>
</LinearLayout>
2️⃣ 从服务器获取商品价格(假设返回 JSON)
private void loadPrice() {
new Thread(() -> {
try {
URL url = new URL("http://example.com/price.json");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream in = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
JSONObject json = new JSONObject(sb.toString());
double price = json.getDouble("price");
runOnUiThread(() -> tvPrice.setText("当前价格:" + price + " 元"));
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
3️⃣ "砍一刀" 按钮逻辑
btnCut.setOnClickListener(v -> {
Random random = new Random();
double cut = random.nextDouble(); // 随机砍价 0~1 元
String text = tvPrice.getText().toString();
double price = Double.parseDouble(text.replace("当前价格:", "").replace(" 元", ""));
double newPrice = Math.max(price - cut, 0);
tvPrice.setText("当前价格:" + String.format("%.2f", newPrice) + " 元");
Toast.makeText(this, "成功砍掉 " + String.format("%.2f", cut) + " 元", Toast.LENGTH_SHORT).show();
});
🎉 总结
通过本章你已经掌握:
✔ HTTP 网络请求(GET/POST)
✔ HttpURLConnection 的使用
✔ WebView 浏览网页与执行 HTML
✔ WebView 打开 JS
✔ JSON 数据解析
✔ 砍价界面实战案例(非常适合课程设计 & 课堂作业)