0

我正在尝试找出 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

    }

}

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

提前致谢!!

4

2 回答 2

0

由于MyLocationListener 此时您正在并行运行,因此您的 zipCode 为空,因此您将获得 0 值。

使固定

您可以等待MyLocationListener完成并将interface方法传递给 thislistener并在此函数完成时调用该方法。

于 2012-12-04T14:27:29.657 回答
0

你在做什么伙计?

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

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

于 2012-12-04T14:27:46.573 回答