第11章 网络编程

📘 第11章 Android 网络编程(超详细 + 代码示例 + 0基础可学)

📑 本章目录


11.1 通过 HTTP 访问网络

11.1.1 HTTP 简介

HTTP(HyperText Transfer Protocol)是浏览器与服务器通信的协议。

常用请求方式:

请求方式 作用
GET 从服务器获取数据
POST 提交数据给服务器

典型访问流程:

  1. 客户端发起请求

  2. 服务器处理请求

  3. 服务器返回数据(如 JSON)

  4. 客户端解析数据并展示


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 数据解析

✔ 砍价界面实战案例(非常适合课程设计 & 课堂作业)

相关推荐
张拭心25 分钟前
春节后,有些公司明确要求 AI 经验了
android·前端·人工智能
张拭心36 分钟前
Android 17 来了!新特性介绍与适配建议
android·前端
Kapaseker3 小时前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴3 小时前
Android17 为什么重写 MessageQueue
android
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android