Monday, April 8, 2013

Search address by name with Geocoder

The getFromLocationName() method of android.location.Geocoder returns an array of Addresses that are known to describe the named location.

Example of searching address by name with Geocoder:

Search address by name with Geocoder


package com.example.androidgeocoder;

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

import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {
 
 EditText searchIn;
 Button searchButton;
 ListView searchOut;
 
 private ArrayAdapter<String> adapter;
 
 Geocoder geocoder;
 final static int maxResults = 5;
 List<Address> locationList;
 List<String> locationNameList;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  searchIn = (EditText)findViewById(R.id.serchin);
  searchButton = (Button)findViewById(R.id.serch);
  searchOut = (ListView)findViewById(R.id.serchout);
  
  searchButton.setOnClickListener(searchButtonOnClickListener);
  
  geocoder = new Geocoder(this, Locale.ENGLISH);
  
  locationNameList = new ArrayList<String>(); //empty in start
  adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_spinner_item, locationNameList);
  searchOut.setAdapter(adapter);
 }
 
 OnClickListener searchButtonOnClickListener =
   new OnClickListener(){

    @Override
    public void onClick(View arg0) {
     String locationName = searchIn.getText().toString();
     
     Toast.makeText(getApplicationContext(), 
       "Search for: " + locationName, 
       Toast.LENGTH_SHORT).show();
     
     if(locationName == null){
      Toast.makeText(getApplicationContext(), 
        "locationName == null", 
        Toast.LENGTH_LONG).show();
     }else{
      try {
       locationList = geocoder.getFromLocationName(locationName, maxResults);
       
       if(locationList == null){
        Toast.makeText(getApplicationContext(), 
          "locationList == null", 
          Toast.LENGTH_LONG).show();
       }else{
        if(locationList.isEmpty()){
         Toast.makeText(getApplicationContext(), 
           "locationList is empty", 
           Toast.LENGTH_LONG).show();
        }else{
         Toast.makeText(getApplicationContext(), 
           "number of result: " + locationList.size(), 
           Toast.LENGTH_LONG).show();
         
         locationNameList.clear();
         
         for(Address i : locationList){
          if(i.getFeatureName() == null){
           locationNameList.add("unknown");
          }else{
           locationNameList.add(i.getFeatureName());
          }
         }
         
         adapter.notifyDataSetChanged();
        }
       }
       
       
      } catch (IOException e) {
       Toast.makeText(getApplicationContext(), 
         "network unavailable or any other I/O problem occurs" + locationName, 
         Toast.LENGTH_LONG).show();
       e.printStackTrace();
      }
     }
    }};

}


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
    <EditText
        android:id="@+id/serchin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/serch"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Search" />
    <ListView
        android:id="@+id/serchout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>


download filesDownload the files.

No comments: