So I'm working out my first multi-threaded application using Android with the AsyncTask class. I'm trying to use it to fire off a Geocoder in a second thread, then update the UI with onPostExecute, but I keep running into an issue with the proper Context.
I kind of hobbled my way through using Contexts on the main thread, but I'm not exactly sure what the Context is or how to use it on background threads, and I haven't found any good examples on it. Any help? Here is an excerpt of what I'm trying to do:
public class GeoCode extends AsyncTask<GeoThread, Void, GeoThread> {
@Override
protected GeoThread doInBackground(GeoThread... i) {
List<Address> addresses = null;
Geocoder geoCode = null;
geoCode = new Geocoder(null); //Expects at minimum Geocoder(Context context);
addresses = geoCode.getFromLocation(GoldenHour.lat, GoldenHour.lng, 1);
}
}
It keeps failing at the sixth line there, because of the improper Context.
@Eugene van der Merwe
The following piece of code works for me : ) -->
public class ApplicationLauncher extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.applicationlauncher);
LoadApplication loadApplication = new LoadApplication(this);
loadApplication.execute(null);
}
private class LoadApplication extends AsyncTask {
Context context;
ProgressDialog waitSpinner;
ConfigurationContainer configuration = ConfigurationContainer.getInstance();
public LoadApplication(Context context) {
this.context = context;
waitSpinner = new ProgressDialog(this.context);
}
@Override
protected Object doInBackground(Object... args) {
publishProgress(null);
//Parsing some stuff - not relevant
configuration.initialize(context);
return null;
}
@Override
protected void onProgressUpdate(Object... values) {
super.onProgressUpdate(values);
// Only purpose of this method is to show our wait spinner, we dont
// (and can't) show detailed progress updates
waitSpinner = ProgressDialog.show(context, "Please Wait ...", "Initializing the application ...", true);
}
@Override
protected void onPostExecute(Object result) {
super.onPostExecute(result);
waitSpinner.cancel();
}
}
}
Cheers,
Ready4Android