Android Studio连接URL及WAMP连MySQL遇FileNotFoundException的解决方法
首先,先看你抛出的错误日志:
W/System.err: java.io.FileNotFoundException: http://192.168.2.198/login.php
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:250)
at com.example.mysqltest.BackgroundWorker.doInBackground(BackgroundWorker.java:46)
at com.example.mysqltest.BackgroundWorker.doInBackground(BackgroundWorker.java:19)
at android.os.AsyncTask$2.call(AsyncTask.java:304)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
这个异常的核心是你的Android应用无法成功访问到WAMP服务器上的login.php资源,下面是一步步的排查和解决方法:
先确认WAMP服务器和PHP文件的基础可用性
- 确保WAMP的系统托盘图标是绿色的,这代表Apache和MySQL服务都正常启动了。如果是黄色,说明有服务没启动,先排查Apache的启动问题。
- 打开电脑本地浏览器,输入
http://localhost/login.php或者http://127.0.0.1/login.php,看能不能正常加载这个PHP文件。如果访问失败,说明你的login.php放错了位置——它必须放在WAMP的www根目录下(Windows默认路径是C:\wamp64\www),或者文件名/路径拼写有误,比如大小写问题(虽然Windows不区分,但最好保持一致)。 - 如果本地能访问,再用电脑浏览器输入你代码里的地址
http://192.168.2.198/login.php,如果这里也打不开,说明WAMP没有允许局域网设备访问。
配置WAMP允许局域网访问
- 右键点击WAMP图标,选择「Put Online」,这个操作会让WAMP开放局域网访问权限。
- 检查Apache的配置文件:通过WAMP图标→Apache→httpd.conf打开配置文件,找到
<Directory "你的www目录路径">的配置段,确保里面的Require all granted(而不是Require local),比如:<Directory "c:/wamp64/www/"> Options Indexes FollowSymLinks MultiViews AllowOverride all Require all granted </Directory> - 修改完成后,重启Apache服务(WAMP图标→Apache→Restart Service),再用电脑浏览器访问局域网IP的
login.php,确认能正常加载。
确保Android设备和电脑在同一局域网
- 如果用的是真机,要和运行WAMP的电脑连接同一个Wi-Fi;如果是模拟器,确保模拟器的网络是桥接模式(或者默认的NAT模式能访问本地局域网)。
- 你可以在Android设备的浏览器里输入
http://192.168.2.198/login.php,如果访问失败,先确认电脑的局域网IP是否正确:Windows用ipconfig命令、Mac/Linux用ifconfig或ip addr命令查看本机的IPv4地址,确保代码里的IP和这个一致。
检查Android应用的网络权限和明文HTTP限制
- 打开
AndroidManifest.xml,确保已经添加了必要的网络权限:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> - 如果你的应用目标SDK版本是28及以上,Android默认禁止明文HTTP请求(你的地址是http而非https),需要配置网络安全策略:
- 在
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.2.198</domain> </domain-config> </network-security-config> - 在
AndroidManifest.xml的<application>标签中添加引用:<application ... android:networkSecurityConfig="@xml/network_security_config"> ... </application>
- 在
- 测试环境下也可以直接在
<application>标签加android:usesCleartextTraffic="true",但还是推荐上面的域名白名单方式,更安全。
- 打开
排查代码中的请求逻辑问题
- 看你错误日志里指向
BackgroundWorker.java的第46行,检查这里的请求方式(GET/POST)是否和login.php预期的一致。比如如果PHP代码是处理POST请求,而你用了GET方式发起请求,可能会导致资源无法正确响应,进而触发这个异常。 - 如果请求带参数,要确保参数已经正确编码,避免因为特殊字符导致URL解析错误。
- 看你错误日志里指向
内容的提问来源于stack exchange,提问作者HARSHA sss

