You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Google Maps附近地点搜索API出现FileNotFoundException如何解决

问题解决方案

1. 修复Places API请求404报错

你出现FileNotFound异常的核心原因是用了错误的接口域名,旧版谷歌周边搜索接口的正确域名是maps.googleapis.com,不是你在用的maps.google.com,直接替换请求前缀即可:
把URL前缀从
https://maps.google.com/maps/api/place/nearbysearch/json
替换为
https://maps.googleapis.com/maps/api/place/nearbysearch/json
另外还要做两项校验:

  • 确认谷歌云控制台已经单独开启了Places API权限,仅开启Maps系列API无法调用地点搜索接口
  • 检查API Key的限制规则,如果设置了安卓应用专属限制,要确认填写的包名、SHA1签名和你当前编译的应用完全匹配

你还可以在downloadUrl方法里先读取接口返回码,报错时读取错误流拿到官方返回的具体错误原因,方便快速定位问题:

int responseCode = connection.getResponseCode();
if (responseCode != 200) {
    // 非200状态时读错误流拿报错信息
    InputStream errorStream = connection.getErrorStream();
    // 打印errorStream内容即可看到具体错误提示,比如Key无效、API未开等
}

2. 修复拿不到用户位置的问题

FusedLocationProviderClient.getLastLocation()返回null属于正常情况,这个方法只会读取系统缓存的位置,当设备近期没有其他应用请求过位置时缓存为空就会返回null,另外你还缺了权限申请的回调处理,做以下修改即可:

  • 补全权限申请回调,用户同意权限后主动触发位置获取:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 44 && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        getCurrentLocation();
    }
}
  • 给位置请求加失败监听,缓存为空时主动请求实时位置,或者提示用户先开启设备定位开关
  • 点击查找按钮时先判断经纬度是否还是初始值0,确认拿到位置后再发起接口请求,避免生成无效URL

另外补充:AsyncTask已经在Android 11中正式废弃,后续可以换成OkHttp、Volley等更稳定的网络请求库替代现有逻辑。

内容的提问来源于stack exchange,提问作者zahid habib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:27:00