2013-03-05 135 views
3

我需要從經緯度獲取郵政編碼,我能夠獲得街道名稱的地址,但無法獲得郵政編碼。字符串pCode正在返回無效在下面的代碼中。 以下是我正在使用的代碼:android從印度經緯度獲得印度的郵政編碼

import java.io.IOException; 
import java.util.List; 
import java.util.Locale; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.ContentResolver; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.pm.ActivityInfo; 
import android.location.Address; 
import android.location.Geocoder; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.provider.Settings; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ProgressBar; 
import android.widget.Toast; 

public class GetCurrentLocation extends Activity implements OnClickListener { 

    private LocationManager locationMangaer=null; 
    private LocationListener locationListener=null; 

    private Button btnGetLocation = null; 
    private EditText editLocation = null; 
    private ProgressBar pb =null; 

    private static final String TAG = "Debug"; 
    private Boolean flag = false; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


     //if you want to lock screen for always Portrait mode 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

     pb = (ProgressBar) findViewById(R.id.progressBar1); 
     pb.setVisibility(View.INVISIBLE); 

     editLocation = (EditText) findViewById(R.id.editTextLocation); 

     btnGetLocation = (Button) findViewById(R.id.btnLocation); 
     btnGetLocation.setOnClickListener(this); 

     locationMangaer = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    } 

    @Override 
    public void onClick(View v) { 
     flag = displayGpsStatus(); 
     if (flag) { 

      Log.v(TAG, "onClick");  

      editLocation.setText("Please!! move your device to see the changes in coordinates."+"\nWait.."); 

      pb.setVisibility(View.VISIBLE); 
      locationListener = new MyLocationListener(); 

      locationMangaer.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, 
        locationListener); 

      } else { 
      alertbox("Gps Status!!", "Your GPS is: OFF"); 
     } 

    } 

    /*----------Method to Check GPS is enable or disable ------------- */ 
    private Boolean displayGpsStatus() { 
     ContentResolver contentResolver = getBaseContext().getContentResolver(); 
     boolean gpsStatus = Settings.Secure.isLocationProviderEnabled(
       contentResolver, LocationManager.GPS_PROVIDER); 
     if (gpsStatus) { 
      return true; 

     } else { 
      return false; 
     } 
    } 

    /*----------Method to create an AlertBox ------------- */ 
    protected void alertbox(String title, String mymessage) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage("Your Device's GPS is Disable") 
       .setCancelable(false) 
       .setTitle("** Gps Status **") 
       .setPositiveButton("Gps On", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           // finish the current activity 
           // AlertBoxAdvance.this.finish(); 
           Intent myIntent = new Intent(
             Settings.ACTION_SECURITY_SETTINGS); 
           startActivity(myIntent); 
           dialog.cancel(); 
          } 
         }) 
       .setNegativeButton("Cancel", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           // cancel the dialog box 
           dialog.cancel(); 
          } 
         }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
    } 

    /*----------Listener class to get coordinates ------------- */ 
    private class MyLocationListener implements LocationListener { 
     @Override 
     public void onLocationChanged(Location loc) { 

       editLocation.setText(""); 
       pb.setVisibility(View.INVISIBLE); 
       Toast.makeText(getBaseContext(),"Location changed : Lat: " + loc.getLatitude() 
           + " Lng: " + loc.getLongitude(),Toast.LENGTH_SHORT).show(); 
       String longitude = "Longitude: " +loc.getLongitude(); 
       Log.v(TAG, longitude); 
       String latitude = "Latitude: " +loc.getLatitude(); 
       Log.v(TAG, latitude); 

       /*----------to get City-Name from coordinates ------------- */ 
       String cityName=null; 
       String addrs = null; 
       String pCode = null; 
       Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());     
       List<Address> addresses; 
       try { 
       addresses = gcd.getFromLocation(loc.getLatitude(), loc.getLongitude(), 1); 
       if (addresses.size() > 0) 
        System.out.println(addresses.get(0).getLocality()); 

       cityName=addresses.get(0).getLocality(); 
       addrs = addresses.get(0).getAddressLine(0); 
       pCode = addresses.get(0).getPostalCode(); 
       } catch (IOException e) {     
       e.printStackTrace(); 
       } 

       String s = longitude+"\n"+latitude +"\n\nMy Currrent City is: "+cityName+" Address "+ addrs+ 
         " Postal Code"+pCode; 
       editLocation.setText(s); 
     } 

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

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

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



} 

回答

0

API的詳細描述.getFromLocation狀態:

返回的值可以由網絡查找來獲得。 結果是一個最佳猜測,不保證是有意義的或 正確。

所以很有可能返回的位置只有一些信息丟失。

有2個解決方案對您的問題:

1)增加的maxResults,可以說5並檢查是否有任何5具有一個郵政編碼(查詢可以返回小於5所以一定要確保。以便進行適當的檢查)

2)請參閱ZipCode from location,瞭解如何在具有城市名稱的情況下單獨查詢它。

相關問題