Android网络请求报错(直接请求http)

这个报错的原因是:Android 9.0 (API 28) 及更高版本默认禁止使用明文 HTTP 请求(只允许 HTTPS)。

根据之前的代码, BASE_URL 是 http://... 开头的,所以被系统拦截了。

这里有 三种解决方法,推荐按顺序尝试:

方法一:最快解决(全局允许 HTTP)

直接修改 AndroidManifest.xml 文件,在 <application> 标签中添加 android:usesCleartextTraffic="true"。

位置: app/src/main/AndroidManifest.xml

xml 复制代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.joygem.demo">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        
        <!-- 添加这一行 -->
        android:usesCleartextTraffic="true" 
        >
        
        <activity android:name=".MainActivity">
            <!-- ... -->
        </activity>
    </application>
</manifest>

添加完后,卸载 App 重新安装(有时直接运行配置不生效),再次尝试即可。


方法二:更规范的做法(配置网络安全文件)

如果你只想允许特定的域名使用 HTTP,而不是全局允许,可以这样做(这在正式上架应用商店时更安全):

  1. 在 res/xml 目录下新建一个文件 network_security_config.xml (如果 xml 目录不存在就创建它)。

  2. 填入以下内容:

    xml 复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <!-- 允许该域名的 HTTP 请求 -->
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">test.xdf.cn</domain>
        </domain-config>
    </network-security-config>
  3. 在 AndroidManifest.xml 的 <application> 标签中引用这个配置:

    xml 复制代码
    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ...>

方法三:修改服务器地址(如果有 HTTPS)

如果你的测试服务器支持 HTTPS,最简单的办法是修改 NetworkApi 中的 BASE_URL:

把: http://testmedia-vod-lan-roombox.test.xdf.cn 改为: https://testmedia-vod-lan-roombox.test.xdf.cn

(前提是服务端配置了 SSL 证书,否则会报证书握手错误)。


建议

对于测试环境(Test Server),直接使用 方法一 是最省事的。

相关推荐
方白羽2 小时前
Android APK安全防护
android·安全·apk
小黄人软件2 小时前
AndroidStudio老项目 macOS运行BlueTooth蓝牙串口助手(Android+Studio源码).rar
android·macos
00后程序员张2 小时前
苹果App Store上架指南:费用、原理与步骤详解
android·ios·小程序·https·uni-app·iphone·webview
天神哥哥啊2 小时前
cocos联调注意事项-安卓
android
TDengine (老段)2 小时前
TDengine TSDB 实战排障四(升级与兼容)
android·java·大数据·数据库·物联网·时序数据库·tdengine
蓝速科技3 小时前
政务自助终端信创选型与无人值守落地方案
android·大数据·数据库·人工智能·科技·技术分享·政务
硫酸锌014 小时前
在手机上运行Python增量备份手机数据到PC电脑
android·windows·python
hai_android5 小时前
子 View 被压小时,如何向父容器"告状"?——MEASURED_STATE_TOO_SMALL 向上传递机制
android·kotlin·android jetpack
AFinalStone5 小时前
Android 7 多用户源码解析(七)系统服务的多用户感知处理
android·系统架构·多用户
怪奇云呼军5 小时前
从 ElevenLabs 看工具调用:闪电智能 Voice Agent 的企业集成验收设计
android·大数据·运维·服务器·网络·人工智能·kotlin