没有从纬度和经度获得邮政编码

时间:2012-12-04 14:18:51

标签: android android-location

我试图找出Android应用程序中的纬度和经度。我使用的代码如下: -

protected int findZipCode() {

    LocationManager lm = (LocationManager) getApplicationContext()
            .getSystemService(Context.LOCATION_SERVICE);
    LocationListener listener = new MyLocationListener();
    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000,
            1000, listener);
    if (zipCode == null) {
        return 0;
    } else {
        return Integer.parseInt(zipCode);
    }
}

private class MyLocationListener implements LocationListener {

    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
        if (location != null) {
            Geocoder geo = new Geocoder(getApplicationContext());
            List<Address> addr = null;
            try {
                addr = geo.getFromLocation(location.getLatitude(),
                        location.getLatitude(), 5);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            zipCode = addr.get(0).getPostalCode();
        }
    }

    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

}

但是这段代码似乎总是为zipcode返回一个空值。任何帮助都会很棒。

提前致谢!!

2 个答案:

答案 0 :(得分:0)

当您的MyLocationListener并行运行时,您的zipCode为null,因此您获得0值。

<强>修正

您可以等待MyLocationListener完成并将interface方法传递给此listener,在此功能完成后,您可以调用该方法。

答案 1 :(得分:0)

你在做什么?

lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000,1000, listener);

以上行是异步调用,当你获得定位时会调用监听器。 您不能在此行之后检查邮政编码。 在listner中,当你获得zipcode的值时,实现一些接口/回调,它将为你提供活动中或任何你想要的zipcode的价值。