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

如何使用特定坐标调用addresses.get().getAddressLine()?指定坐标获取地址时应用崩溃问题排查

解决Geocoder获取地址时的空指针崩溃问题

嘿,我一眼就看出问题出在哪了——你直接调用addresses.get(0)的时候,完全没考虑addresses可能是null的情况!

问题根源

Geocoder的getFromLocation()方法并不是总能返回有效的List<Address>:

  • 如果设备没有联网、谷歌服务配置不全,或者传入的坐标无法解析出有效地址,这个方法就会返回null
  • 你跳过了空判断直接调用get(0),自然会触发空指针异常

修复后的完整代码

给你改好的代码,加了多层空判断,彻底避免崩溃:

double latitude = 46.750723170116544; 
double longitude = 23.589887470006943; 
Geocoder geocoder = new Geocoder(this, Locale.getDefault()); 
String address = "无法获取地址信息"; // 设置默认提示文本

try { 
    List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1); 
    // 先判断addresses不为null,且列表里有数据
    if (addresses != null && !addresses.isEmpty()) {
        Address addressObj = addresses.get(0);
        // 再判断地址行是否存在,避免又一个空指针
        if (addressObj.getAddressLine(0) != null) {
            address = addressObj.getAddressLine(0);
        }
    }
} catch (IOException e) { 
    e.printStackTrace();
    address = "地址获取失败:" + e.getMessage(); // 捕获IO异常,给用户明确提示
} 

txt_street_limit.setText(address);

额外注意事项

  • 确保你的应用已经申请了ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限(虽然这里是手动传坐标,但Geocoder有时还是依赖位置权限)
  • 检查设备是否联网,并且有可用的谷歌服务(国内设备可能需要特殊配置,或者考虑使用其他地理编码服务)
  • 可以增加一个加载状态,避免用户等待时的困惑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:32:38