user1160038
user1160038

Reputation:

Not able to print address from Reverse Geocoding in Android

I reffred many questions from Stack overflow and implemented the above procedure. But I am unable to get the adress. Please let me know If i missed something.. ? myLoc = (TextView) findViewById(R.id.id1);

Geocoder geocoder = new Geocoder(getBaseContext(),Locale.getDefault());
try {
    address = geocoder.getFromLocation(latitude, longitude, 1);
                if (address.size() > 0) {
        for (int i = 0; i < address.get(0)
                .getMaxAddressLineIndex(); i++) {
            display = "";
            display += address.get(0).getAddressLine(i)
                    + "\n";
        }
        }

} catch (Exception e2) {
    // TODO: handle exception
}
myLoc.setText("Current Location:"+display);
System.out.println(display);

Upvotes: 1

Views: 909

Answers (4)

xaif
xaif

Reputation: 563

You can do like this to get complete address. In case you want country name , state etc seperately .Then, I will not prefer you this method .

public class ParentHomeActivity extends AppCompatActivity {

     ...

private Geocoder geocoder;
private TextView mAddressTxtVu;

     ...


// I assume that you got latitude and longitude correctly 

mLatitude  =  20.23232
mLongitude =  32.999

String errorMessage = "";

geocoder = new Geocoder(context, Locale.getDefault());

List<Address> addresses = null;

try {
          addresses = geocoder.getFromLocation(
                   mlattitude,
                   mlongitude,
                   1);
  } catch (IOException e) {
          errorMessage = getString(R.string.service_not_available);
          Log.e(TAG, errorMessage, e);
  } catch (IllegalArgumentException illegalArgumentException) {
                    // Catch invalid latitude or longitude values.
          errorMessage = getString(R.string.invalid_lat_long_used);
          Log.e(TAG, errorMessage + ". " + "Latitude = " + mlattitude +", 
         Longitude = " + mlongitude, illegalArgumentException);
  }

  // Handle case where no address was found.
  if (addresses == null || addresses.size() == 0) {
         if (errorMessage.isEmpty()) {
                  errorMessage = getString(R.string.no_address_found);
                  Log.e(TAG, errorMessage);
         }

  } else {
         Address address = addresses.get(0);
         ArrayList<String> addressFragments = new ArrayList<String>();

         // Fetch the address lines using getAddressLine,
         // join them, and send them to the thread.
         for (int i = 0; i <= address.getMaxAddressLineIndex(); i++) {
                  addressFragments.add(address.getAddressLine(i));
         }
         // Log.i(TAG, getString(R.string.address_found));


   mAddressTxtVu.setText(TextUtils.join(System.getProperty("line.separator"),
                            addressFragments));
                }

Upvotes: 0

David Suppiger
David Suppiger

Reputation: 91

  1. getMaxAddressLineIndex() returns an index which start from zero and thus your for-loop condition should be 0 <= maxIndex instead of 0 < maxIndex
  2. You overwrite previous address lines on every iteration by assigning display = ""; and thus will end up with the last address line only. Is that on purpose?

Upvotes: 1

Jason Crosby
Jason Crosby

Reputation: 3583

Another good idea is to implement the LocationListener interface and register your Activity as a listener using LocationManager requestLocationUpdates() method. You can then override onLocationUpdate() to be informed whenever the location of the device changes. You provide the requestLocationUpdates() method the minimum amount of time that must pass before you will accept another update and how far the device must move before you get an update.

Upvotes: 0

Abhi
Abhi

Reputation: 9005

You can use Reverse geo coding to and Google apis to get address from latitude and longitude.

Reverse Geo Coding:

 double currentLatitude;
    double currentLongitude;

void getAddress(){
        try{
            Geocoder gcd = new Geocoder(this, Locale.getDefault());
            List<Address> addresses = 
                gcd.getFromLocation(currentLatitude, currentLongitude,100);
            if (addresses.size() > 0) {
                StringBuilder result = new StringBuilder();
                for(int i = 0; i < addresses.size(); i++){
                    Address address =  addresses.get(i);
                    int maxIndex = address.getMaxAddressLineIndex();
                    for (int x = 0; x <= maxIndex; x++ ){
                        result.append(address.getAddressLine(x));
                        result.append(",");
                    }               
                    result.append(address.getLocality());
                    result.append(",");
                    result.append(address.getPostalCode());
                    result.append("\n\n");
                }
                addressText.setText(result.toString());
            }
        }
        catch(IOException ex){
            addressText.setText(ex.getMessage().toString());
        }
    }

Google API: See this api which retrun address from latitude and longitude

http://maps.googleapis.com/maps/api/geocode/json?latlng=17.734884,83.299507&sensor=true

To know more read this

Upvotes: 1

Related Questions