You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中如何将在线URL的XML文件转为InputStream供DOM解析

实现步骤

1. 配置网络权限

在项目的AndroidManifest.xml文件的<manifest>节点下添加网络访问权限:

<uses-permission android:name="android.permission.INTERNET" />

如果后续需要访问HTTP协议的地址,还需要在<application>节点添加属性:android:usesCleartextTraffic="true",当前目标地址是HTTPS协议不需要额外配置。

2. 调整执行线程

Android系统禁止在主线程执行网络操作,否则会抛出NetworkOnMainThreadException异常,所以需要把网络请求、XML解析逻辑放到子线程执行,解析完成后再切回主线程更新TextView内容。

3. 修改InputStream获取逻辑

将原本读取本地Asset文件的逻辑替换为从目标URL获取输入流的逻辑,修改后的完整代码如下:

TextView tv;
List<String> list = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv = findViewById(R.id.tv);
    // 启动子线程执行网络请求和解析
    new Thread(() -> {
        XMLDOMParser parser = new XMLDOMParser();
        InputStream stream;
        try {
            // 替换为从目标URL获取输入流
            URL url = new URL("https://www.w3schools.com/xml/plant_catalog.xml");
            stream = url.openConnection().getInputStream();
            Document doc = parser.getDocument(stream);
            // 替换为XML中实际的节点名,当前XML的植物节点为PLANT
            NodeList nodeList = doc.getElementsByTagName("PLANT");
            for (int i = 0; i < nodeList.getLength(); i++) {
                Element e = (Element) nodeList.item(i);
                // 替换为实际需要读取的子标签名,比如COMMON(植物通用名)、PRICE(价格)等
                list.add(parser.getValue(e, "COMMON"));
            }
            // 切回主线程更新UI
            runOnUiThread(() -> tv.setText(list.toString()));
        } catch (Exception e) {
            e.printStackTrace();
            // 异常也切回主线程更新
            runOnUiThread(() -> tv.setText(e.toString()));
        }
    }).start();
}

内容的提问来源于stack exchange,提问作者richard.online

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:15:03