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

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

相关推荐
自动化BUG制造器2 小时前
Android UI 线程不一定是主线程
android
无知的前端2 小时前
一文读懂-Jetpack与AndroidX
android·kotlin·android jetpack
橘子真甜~2 小时前
C/C++ Linux网络编程5 - 网络IO模型与select解决客户端并发连接问题
linux·运维·服务器·c语言·开发语言·网络·c++
霖003 小时前
ZYNQ——ultra scale+ IP 核详解与配置
服务器·开发语言·网络·笔记·网络协议·tcp/ip
河铃旅鹿4 小时前
Android开发-java版:SQLite数据库
android·数据库·笔记·学习·sqlite
旋律逍遥4 小时前
《Framework 开发》3、开发工具及命令行知识装备
android
啦啦9117144 小时前
安卓手机/平板/TV版 Rotation强制横屏显示工具!免ROOT可用!再推荐突破手机限制的3款神器
android·智能手机·电脑
天一生水water4 小时前
什么是调压器的P2s
linux·服务器·网络
汤面不加鱼丸5 小时前
flutter实践:混合app在部分android旧机型上显示异常
android·flutter