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

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

相关推荐
MXsoft6184 分钟前
**混合云统一监控实践:私有云+公有云的一体化运维方案**
运维·网络·数据库
天南散修9 分钟前
MT7916驱动中802.11转换为802.3
linux·网络·驱动开发·wifi·802.11
其实防守也摸鱼23 分钟前
无线网络安全--10 规避WLAN验证之挫败MAC地址限制
网络·智能路由器·php·教程·虚拟机·wlan·无线网络安全
xiaoxiaoxiaolll31 分钟前
《Nature Communications》亮点文章:自供电双窄带OPD如何实现1.25 Mbps下的抗窃听光通信?
网络
Jinkxs41 分钟前
Python基础 - 初识内置函数 Python自带的便捷工具
android·java·python
CriticalThinking44 分钟前
在xshell中使用ssh隧道访问远程服务
linux·网络·ssh
爱装代码的小瓶子1 小时前
安工大题目分类(含解析和翻译)
linux·网络·c
私人珍藏库1 小时前
【Android】VLLO-韩国热门手机剪辑APP
android·app·工具·软件·多功能
IpdataCloud2 小时前
跨境支付如何识别高风险IP?用IP风险画像服务选型与集成指南
服务器·网络·数据库·tcp/ip·安全
Cloud_Shy6182 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第六章 Item 40 - 43)
android·开发语言·人工智能·笔记·python·学习方法