Android Volley库无法向本地服务器发起请求,求排查方案
问题分析与解决方案
核心原因
当error.networkResponse为null时,说明请求连网络连接都没建立起来,并非后端返回了错误状态码。结合你浏览器和Apache库能正常请求的情况,问题大概率出在Android端的网络配置或权限上。
具体排查与修复步骤
1. 检查并添加网络权限
确保你的AndroidManifest.xml中声明了互联网权限,没有这个权限App无法发起网络请求:
<uses-permission android:name="android.permission.INTERNET" />
这个权限属于普通权限,不需要动态申请,只要在Manifest中声明即可。
2. 解决Android 9+的明文网络限制
如果你的App运行在Android 9(API 28)及以上版本,系统默认禁止明文HTTP流量(仅允许HTTPS),而你请求的是http://192.168.1.8:8080,会被拦截。解决方法有两种:
- 方法一:直接在
AndroidManifest.xml的<application>标签中添加允许明文流量的配置:<application ... android:usesCleartextTraffic="true"> ... </application> - 方法二:创建网络安全配置文件(更规范):
在res/xml下新建network_security_config.xml,内容如下:
然后在<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">192.168.1.8</domain> </domain-config> </network-security-config>AndroidManifest.xml的<application>标签中引用:<application ... android:networkSecurityConfig="@xml/network_security_config"> ... </application>
3. 确认局域网网络互通
- 确保你的Android设备和运行Tomcat的电脑连接在同一个WiFi局域网下。
- 检查电脑的防火墙设置,是否允许8080端口的入站请求(可以临时关闭防火墙测试)。
- 验证IP地址是否正确:在电脑上执行
ipconfig(Windows)或ifconfig(Linux/macOS),确认局域网IP确实是192.168.1.8。
4. 修复错误回调中的空指针问题
在错误回调中,先判断networkResponse是否为null,再访问statusCode,避免空指针异常:
error -> { System.out.println("That didn't work!"); if (error.networkResponse != null) { System.out.println("错误状态码: " + error.networkResponse.statusCode); } else { // 打印具体错误信息,帮助排查 System.out.println("无网络响应,错误信息: " + error.getMessage()); } textResponse.setText("error"); }
验证步骤
按上述步骤修复后,重新运行App,应该能正常获取后端返回的JSON数据。如果仍有问题,可以在错误回调中打印error.getMessage(),根据具体错误信息进一步排查。
内容的提问来源于stack exchange,提问作者Luigi V.
相关产品推荐
相关产品推荐

