如何移除LatLng对象转换所得地址中的国家信息?
修改方案:移除地址中的国家信息
没问题,我来帮你调整这个函数,既能保留你需要的地址信息,又能去掉国家相关内容,还顺便优化了空指针的问题:
public static Address getAddressFromLatLng(Context context, LatLng latLng){ Geocoder geocoder; List<Address> addresses = null; geocoder = new Geocoder(context, Locale.getDefault()); try { addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1); // 先判断是否获取到有效地址,避免空指针异常 if (addresses != null && !addresses.isEmpty()) { Address address = addresses.get(0); // 清空国家相关的字段 address.setCountryName(null); address.setCountryCode(null); return address; } } catch (IOException e) { Log.e("LatLng", "geoLocate: IOException: " + e.getMessage()); } // 如果没获取到地址,返回null或者根据你的需求处理 return null; }
关键修改点说明:
- 增加空安全判断:在获取地址后先检查
addresses是否为空,避免直接调用get(0)导致的NullPointerException - 清空国家信息:通过
setCountryName(null)和setCountryCode(null)清空Address对象里的国家名称和国家代码,这样后续使用这个对象时就不会拿到国家相关内容了 - 兜底返回:如果获取地址失败(比如网络问题、无法解析坐标),返回
null,你可以根据自己的业务需求改成抛出异常或者返回默认值
如果你不需要完整的Address对象,只想提取非国家的地址片段(比如城市、街道),也可以改成返回自定义的字符串或者自定义对象,比如:
public static String getNonCountryAddress(Context context, LatLng latLng){ Geocoder geocoder; List<Address> addresses = null; geocoder = new Geocoder(context, Locale.getDefault()); try { addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1); if (addresses != null && !addresses.isEmpty()) { Address address = addresses.get(0); StringBuilder sb = new StringBuilder(); // 按需拼接你需要的地址部分,比如街道、城市、区域 if (address.getThoroughfare() != null) sb.append(address.getThoroughfare()).append(", "); if (address.getLocality() != null) sb.append(address.getLocality()).append(", "); if (address.getAdminArea() != null) sb.append(address.getAdminArea()); // 去掉末尾多余的逗号和空格 return sb.toString().replaceAll(", $", ""); } } catch (IOException e) { Log.e("LatLng", "geoLocate: IOException: " + e.getMessage()); } return "无法获取地址"; }
这样返回的就是不含国家信息的地址字符串,更灵活。
内容的提问来源于stack exchange,提问作者Ar26
相关产品推荐
相关产品推荐

