Thursday, February 10, 2011

Get list of address from location using Geocoder

Last exercise "Get address from location using Geocoder" retrieve only one address from a specifiied location. In this exercise, a list of 5 addresses are retrieved; by submitting "5"(maxResult) in the third parameter of getFromLocation() method.

Get list of address from location using Geocoder

Modify main.xml to add a Spinner to show the returned address.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
<TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="@string/hello"
  />
<TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="Location"
  android:background="#505050"
  />
<TextView
  android:id="@+id/mylatitude"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  />
<TextView
  android:id="@+id/mylongitude"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  />
<TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="Address"
  android:background="#505050"
  />
<TextView
  android:id="@+id/myaddress"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  />
<Spinner
  android:id="@+id/addresslist"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  />
</LinearLayout>


AndroidFromLocation.java
package com.exercise.AndroidFromLocation;

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

import android.app.Activity;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class AndroidFromLocation extends Activity {

double LATITUDE = 37.42233;
double LONGITUDE = -122.083;

final int maxResult =5;
String addressList[] = new String[maxResult];
private ArrayAdapter<String> adapter;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      TextView myLatitude = (TextView)findViewById(R.id.mylatitude);
      TextView myLongitude = (TextView)findViewById(R.id.mylongitude);
      TextView myAddress = (TextView)findViewById(R.id.myaddress);
      Spinner myAddressList = (Spinner)findViewById(R.id.addresslist);
    
      myLatitude.setText("Latitude: " + String.valueOf(LATITUDE));
      myLongitude.setText("Longitude: " + String.valueOf(LONGITUDE));
    
      Geocoder geocoder = new Geocoder(this, Locale.ENGLISH);

      try {
  List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, maxResult);
 
  if(addresses != null) {
  
   for (int j=0; j<maxResult; j++){
    Address returnedAddress = addresses.get(j);
    StringBuilder strReturnedAddress = new StringBuilder();
    for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
     strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
    }
    addressList[j] = strReturnedAddress.toString();
   }
  
   adapter = new ArrayAdapter<String>(this,
     android.R.layout.simple_spinner_item, addressList);
   adapter.setDropDownViewResource(android.R.layout.
     simple_spinner_dropdown_item);
   myAddressList.setAdapter(adapter);
  }
  else{
   myAddress.setText("No Address returned!");
  }
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  myAddress.setText("Canont get Address!");
 }
  }
}


Download the files.

Related Article:
- Get location(Latitude and Longitude) from described address using Geocoder


Updated@20150916:
Find addresses of given latitude and longitude using android.location.Geocoder
Example allow users to enter latitude and longitude, then find the addresses that are known to describe the area immediately surrounding the given latitude and longitude,

No comments: