Android Studio如何通过RESTful API从本地服务端获取JSON数据
安卓端无法连接本地后端服务的解决方案
你遇到的是安卓应用访问本地后端失败的典型场景,按以下步骤排查即可:
修正访问地址
你代码中写的http://localhost:8080/quiz里的localhost指向的是运行APP的设备本身,而非你跑后端服务的电脑:- 用安卓模拟器调试时,将地址替换为
http://10.0.2.2:8080/quiz,这是模拟器预留的指向宿主机的专属IP - 用真机调试时,保证手机和电脑处于同一局域网,将地址替换为你电脑的局域网IP(例如
http://192.168.3.4:8080/quiz),同时关闭电脑防火墙或者放行8080端口的入站规则
- 用安卓模拟器调试时,将地址替换为
开放明文HTTP访问权限
安卓9及以上系统默认禁止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">10.0.2.2</domain> <!-- 真机调试时在此处添加你电脑的局域网IP --> <domain includeSubdomains="true">192.168.x.x</domain> </domain-config> </network-security-config>
- 在
AndroidManifest.xml的<application>标签中添加属性:android:networkSecurityConfig="@xml/network_security_config"
- 检查网络权限配置
确认AndroidManifest.xml的<manifest>标签下已经添加网络访问权限:
<uses-permission android:name="android.permission.INTERNET" />
- 配置后端跨域允许
安卓端请求属于跨域请求,默认会被后端拦截,如果你用的是SpringBoot后端,直接在对应Controller类上添加@CrossOrigin注解即可,其他后端框架按对应规则配置跨域允许即可。
补充排查技巧:你当前代码Volley的错误回调仅弹出通用提示,没有打印错误日志,可在onErrorResponse方法中添加Log.e("请求错误", error.toString(), error),即可在Logcat中查看具体错误原因,加快定位效率。
内容的提问来源于stack exchange,提问作者22eragon22
相关产品推荐
相关产品推荐

