You need to enable JavaScript to run this app. Android开发发起HTTP请求时报NetworkOnMainThreadException问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Android开发发起HTTP请求时报NetworkOnMainThreadException问题求助

崩溃原因定位

直接从堆栈日志的最内层异常就能找到根本问题:android.os.NetworkOnMainThreadException。
你之前花时间调整的所有清单配置、网络安全配置全部正确,不存在逻辑错误:

  • 已正确声明INTERNET、ACCESS_NETWORK_STATE所需的网络权限
  • 已开启明文流量访问,适配高版本API的网络限制
  • 针对google.com配置的子域名放行规则,完全覆盖你测试请求的www.google.com域名范围

从Android 4.0(API 14)开始,系统强制禁止在应用主线程(UI线程)上执行任何网络操作,一旦触发该规则就会直接抛出崩溃,和你做的这些网络配置没有任何关联。

修复方法

把网络请求逻辑从主线程移出到独立子线程执行即可,修改后的点击事件代码如下:

public void onClick(View view) {
    new Thread(() -> {
        try {
            URL url = new URL("http://www.google.com/");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            // 添加基础超时配置,避免无响应时阻塞线程
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);
            conn.connect();
            // 在此处添加后续业务逻辑
            conn.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }).start();
}
新手注意事项
  • 不要使用开启StrictMode宽松策略的方式绕开主线程网络检查做临时测试,这种方式会导致应用UI卡顿、触发ANR,属于调试专用的临时手段,不适合正式场景使用
  • 如果后续需要在网络请求完成后更新界面控件,不能直接在子线程里操作UI,需要切回主线程完成控件更新
  • 你使用的Android 9(API 28)系统,本身默认对明文流量的限制比API 30宽松,现有配置已经足够支撑你当前的测试需求,不需要再调整其他XML配置

内容的提问来源于stack exchange,提问作者obeda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 09:45:08