The query will block and returned values will be obtained by means of a network lookup. The results are a best guess and are not guaranteed to be meaningful or correct. It may be useful to call this method from a thread separate from your primary UI thread.
Modify the last exercise "Get list of address from location using Geocoder", the returned address of the clicked item is passed to getFromLocationName(), to get the location(Latitude and Longitude).
Suggest to test on true device. In my tests, it doesn't always work on emulator!

<?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"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Returned Address"
android:background="#505050"
/>
<TextView
android:id="@+id/returnedaddress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/returnedlatitude"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/returnedlongitude"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
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.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
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;
TextView myReturnedAddress, myReturnedLatitude, myReturnedLongitude;
Geocoder geocoder;
/** 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);
myReturnedAddress = (TextView)findViewById(R.id.returnedaddress);
myReturnedLatitude = (TextView)findViewById(R.id.returnedlatitude);
myReturnedLongitude = (TextView)findViewById(R.id.returnedlongitude);
myLatitude.setText("Latitude: " + String.valueOf(LATITUDE));
myLongitude.setText("Longitude: " + String.valueOf(LONGITUDE));
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);
myAddressList.setOnItemSelectedListener(myAddressListOnItemSelectedListener);
}
else{
myAddress.setText("No Address returned!");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
myAddress.setText("Canont get Address!");
}
}
Spinner.OnItemSelectedListener myAddressListOnItemSelectedListener
= new Spinner.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
myReturnedAddress.setText(addressList[arg2]);
try {
List<Address> returnedaddresses = geocoder.getFromLocationName(addressList[arg2], 1);
if(returnedaddresses != null){
myReturnedLatitude.setText(String.valueOf(returnedaddresses.get(0).getLatitude()));
myReturnedLongitude.setText(String.valueOf(returnedaddresses.get(0).getLongitude()));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}};
}

16 comments:
i have tried this code but it does not work for me.when i try to run force close error comes.
hello new,
Make sure the "3G" icon is on, it need online service.
Hi, I am beginner to Android and I want to get just lacation (lat and long). How can i do that?
Thanks...
hello Erol,
Check the code, returnedaddresses.get(0).getLatitude() and returnedaddresses.get(0).getLongitude() are the returned lat and long.
hi! i get 'cannot get address' on emulator
and the logcat says:
service not available
why is that..is it because of 3g like u said before?if yes,how to turn it on ?does exist in emulator?
+++ i have this icon 3G on emulator like in the example
do i have to set the location i am right now..?i suppose the locaation of the example is of your place..i live in greece so i have to set it different
hello dimitrismidas,
Just re-tested the exercise again and again, it seem not always work on emulator! Sometimes ok, sometimes not ok as your case! But work on true Nexus One running 2.2.1. So I think it's problem of emulator.
this example gives the same address every time because you set the LATITUDE & LONGITUDE on the java file..?.if you change location will still show the same address?
if i want to have the address i am without giving the LAT LONG what should i do?
hello dimitrismidas,
Yes, the LAT & LONG are hard coded, so the returned address is always the same.
You can implement two EditText for user to enter LAT & LONG.
it always given an Exception :
java.io.IOException: Service Not Found
I couldnt understand which type of service required
Geocoder is a online service.
Hi Android Er,
Thank you very much for the nice guide.
Being a beginner myself, I have few questions in mind.
Could you please guide us through the requirements for the Manifest File of this application. Would be nice to know which API level you are targeting in this current project (Also Google API / Android API).
regards
i cant enable gps in my emulator and i cant set lattitude and longitude from location control also
how can get latitude and longitude of two locations at one time for showing root of two location on goggle map in android?
i had try but it show first time it give msg like No Address returned! and second time Canont get Address! .. give me solution...
Post a Comment