package com.papagiannis.tuberun.fetchers; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Locale; import android.content.Context; import android.location.Address; import android.location.Geocoder; import android.location.Location; import android.os.AsyncTask; import android.util.Log; public class ReverseGeocodeFetcher extends Fetcher { private static final long serialVersionUID = 1L; private Context context; private Location location; private List<Address> result=new ArrayList<Address>(); public ReverseGeocodeFetcher(Context context, Location l) { super(); this.context=context; this.location=l; } private transient AsyncTask<Double, Integer, List<Address>> task=null; private void reverseGeocode(Location l) { final Geocoder myLocation = new Geocoder(context, Locale.getDefault()); if (myLocation != null) { task = new AsyncTask<Double, Integer, List<Address>>() { @Override protected List<Address> doInBackground(Double... params) { List<Address> result = new ArrayList<Address>(); try { result = myLocation.getFromLocation(params[0], params[1], 1); } catch (Exception e) { Log.w(getClass().toString(), e); } return result; } protected void onPostExecute(List<Address> res) { result=res; notifyClients(); } }; task.execute(l.getLatitude(), l.getLongitude()); } } public ReverseGeocodeFetcher setLocation(Location l) { this.location=l; return this; } @Override public void update() { reverseGeocode(location); } @Override public Date getUpdateTime() { return new Date(); } public List<Address> getResult() { return result; } @Override public void abort() { if (task!=null) task.cancel(true); } }