如何使用特定坐标调用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
相关产品推荐
相关产品推荐

