Android Studio连接本地Laravel API路由失败问题求助
咱们一步步来排查这个问题,从几个核心关键点入手:
1. 检查路由定义与请求路径的匹配度
你Retrofit里的请求是@GET("stocks.json"),结合BASE_URLhttp://192.168.1.106:8000/api/,完整请求地址会是http://192.168.1.106:8000/api/stocks.json。但Laravel的API路由默认在routes/api.php里定义,比如如果你的路由是:
Route::get('stocks', [StockController::class, 'index']);
那正确的API地址应该是http://192.168.1.106:8000/api/stocks,不带.json后缀——Laravel不会自动识别这个后缀,除非你特意配置。
调整方案:
- 要么把Retrofit的
@GET("stocks.json")改成@GET("stocks"); - 要么在Laravel里配置路由支持后缀:在
RouteServiceProvider里添加Route::pattern('extension', 'json');,然后定义路由为Route::get('stocks.{extension}', [StockController::class, 'index']);。
2. 确保Laravel服务器允许外部设备访问
默认情况下,php artisan serve只会绑定到127.0.0.1,只有本机能访问。模拟器或同一局域网的真机无法通过你的IPv4地址(192.168.1.106)连接。
解决办法:
启动服务器时指定监听所有网卡:
php artisan serve --host=0.0.0.0 --port=8000
这样服务器会监听所有可用网络接口,同一局域网的设备就能通过192.168.1.106:8000访问了。
3. 排查跨域(CORS)问题
静态文件能访问但API路由不行,很大概率是跨域拦截。浏览器和APP的HTTP客户端会遵循CORS规则,Laravel默认没有配置跨域允许,导致请求被拦截。
解决办法:
- 安装Laravel CORS扩展包:
composer require barryvdh/laravel-cors - 发布配置文件:
php artisan vendor:publish --provider="Barryvdh\Cors\ServiceProvider" - 在
config/cors.php里配置:将paths设为['api/*'],allowed_origins设为['*'](开发环境可用,生产环境需指定具体域名); - 在
app/Http/Kernel.php的api中间件组里添加\Barryvdh\Cors\HandleCors::class。
配置完成后重启Laravel服务器,再测试APP的API请求。
4. 先验证API路由本身是否可用
不用APP,直接用Postman或浏览器访问http://192.168.1.106:8000/api/stocks(对应你的路由路径):
- 如果返回404,说明路由定义有问题,回到第一步检查;
- 如果返回500,查看Laravel的
storage/logs/laravel.log找具体错误; - 如果浏览器提示跨域错误,说明CORS配置未生效。
5. 模拟器的特殊网络配置(若用模拟器测试)
如果你用的是Android AVD模拟器,主机的127.0.0.1对应模拟器里的10.0.2.2。如果服务器只绑定了127.0.0.1,可以把APP的BASE_URL改成http://10.0.2.2:8000/api/,但更推荐用--host=0.0.0.0启动服务器,这样模拟器和真机都能通过IPv4地址访问。
按上面的步骤排查,应该能解决本地API路由无法访问的问题。
内容的提问来源于stack exchange,提问作者user8323205

