2012-12-04 95 views
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 

    } 

} 

但是,此代码似乎始终为邮政编码返回空值。任何帮助都会很棒。

在此先感谢!

回答

0

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

修复

您可以等待MyLocationListener完成,并通过一个interface方法来此listener并在完成这个功能,你可以调用该方法。

0

你在干什么?

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

上面这行是异步调用,当您获得位置修正时将会调用监听器。 您无法在此行之后检查邮政编码。 在listner中,当你得到zipcode的值时,实现一些接口/回调,它会给你在你的活动或任何你想要的地方的zipcode值。

+0

你可以PLZ建议我需要在我的代码中做出的调整? –

+0

findZipCodeFunction写在哪里? Listner定义在哪里?在同一活动? – Farhan

+0

是啊,他们都在同一个活动......我需要的人得到的邮政编码,然后我在我的应用程序中的邮政编码的基础上执行搜索... –

相关问题