无法使用地理编码器,提供未处理的类型IOException

时间:2013-07-09 19:14:06

标签: android

这是代码

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
                Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                double longitude = location.getLongitude();
                double latitude = location.getLatitude();
                Geocoder gcd = new Geocoder(context, Locale.getDefault());
                List<Address> addresses = **gcd.getFromLocation(latitude, longitude, 1);**

给出错误的部分用星号突出显示。

谢谢。

2 个答案:

答案 0 :(得分:5)

如果网络不可用或发生任何其他I / O问题,

getFromLocation()会抛出IOException

http://developer.android.com/reference/android/location/Geocoder.html#getFromLocation(double, double, int)

要解决此问题,请使用try/catch块围绕它:

try {
    List<Address> addresses = gcd.getFromLocation(latitude, longitude, 1);
}
catch (IOException e) {
    e.printStackTrace();
}

答案 1 :(得分:2)

除了Ken WOlfs的回答,您还必须检查设备上是否有GeoCoder服务。

“Geocoder类需要一个未包含在核心android框架中的后端服务。如果平台中没有后端服务,Geocoder查询方法将返回一个空列表。使用isPresent()方法确定是否有Geocoder实施存在。“ - 谷歌

所以你的代码应该是这样的:

if(Geocoder.isPresent()){
    Geocoder gcd = new Geocoder(context, Locale.getDefault());
    try {
        List<Address> addresses = gcd.getFromLocation(latitude, longitude, 1);
    } catch (IOException e) { e.printStackTrace(); }
}