Android Studio中Retrofit调用WorldTimeAPI出现CLEARTEXT错误如何解决?
问题根源
从Android 9.0(API级别28)开始,系统默认禁用所有明文HTTP通信,你当前配置的请求BaseURL为http://worldtimeapi.org/api/timezone/,属于未加密的HTTP请求,因此触发了系统网络安全策略拦截,抛出对应的错误。
解决方案(按优先级排序)
1. 替换为HTTPS请求(最推荐)
该公开API本身支持HTTPS协议访问,直接修改MainActivity.java中的BASE_URL配置即可:
private String BASE_URL = "https://worldtimeapi.org/api/timezone/";
无需额外添加其他配置,修改后重新运行即可正常发起请求。
2. 仅允许指定域名的明文请求(适配必须用HTTP的场景)
如果业务场景必须使用HTTP协议请求该域名,可以通过自定义网络安全配置放开限制:
- 第一步:在
res/xml目录下新建network_security_config.xml文件,写入以下内容:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">worldtimeapi.org</domain> </domain-config> </network-security-config>
- 第二步:在
AndroidManifest.xml的<application>标签中添加属性引用该配置:
<application ... android:networkSecurityConfig="@xml/network_security_config" ...> <!-- 其余Activity、Service等组件配置 --> </application>
3. 全局放开所有明文请求限制(仅测试用,不推荐线上使用)
如果仅为本地快速测试,可以直接在AndroidManifest.xml的<application>标签中添加以下属性,放开所有HTTP请求的限制:
<application ... android:usesCleartextTraffic="true" ...> <!-- 其余Activity、Service等组件配置 --> </application>
该配置存在安全风险,禁止在线上版本中使用。
内容的提问来源于stack exchange,提问作者Wicaledon
相关产品推荐
相关产品推荐

