I am not sure what I am doing wrong but onPostExecute never gets called.
- Created a base class called BaseActivity.java
- From my original Activity I extended this class.
- Placed PostToOpenFeint class inside BaseActivity
-
Called it from the UI thread from the main activity my doing:
new PostToOpenFeint.execute();
The onPreExecute(), doInBackground(..) gets triggered, but for some reason the onPostExecute never gets called.
Thank you in Advance!
Dave
private class PostToOpenFeint extends AsyncTask<Void, Void, Void> {
/*
* (non-Javadoc)
*
* @see android.os.AsyncTask#doInBackground(Params[])
*/
@Override
protected Void doInBackground(Void... params) {
// does all the work here
return null;
}
/*
* (non-Javadoc)
*
* @see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Toast.makeText(MainScreen.this, "Done syncing", Toast.LENGTH_LONG).show();
}
/*
* (non-Javadoc)
*
* @see android.os.AsyncTask#onPreExecute()
*/
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
Toast.makeText(MainScreen.this, "About to sync all your scores", Toast.LENGTH_LONG).show();
}
Looking into it more, this is what I was able to observe. For example if I place this call:
new PostToOpenFeint.execute();
right after onCreate of the Activity, then everything works fine. If I place this call say inside a button listener.
settingsButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new PostToOpenFeint.execute();
}
});
The onPostExecute() never gets called, not sure what I am doing wrong. The restriction I read was to call this from UI Thread and I am calling it from UI thread.
Best Answer
I had a similiar problem just now. I was extending
AsyncTask<Integer,Integer,Integer>
and my onPostExecute method looked like:This seemed OK to me, but then again I'm more of a .NET guy than a Java guy. I changed it to:
because for some reason Java thinks there is a difference between
int
andInteger
?I think that your problem is that you're declaring the return type as
void
in your:That means no params, no progress and no result. If you want to execute something when it's done, I think you need to give it some kind of value like and integer or a boolean.
If you change your extends to:
Now your passing no params, not publishing any progress, but are returning a value. Change your
onPostExecute
method to accept anInteger
:Then change the return in your
doInBackground
method to something like:Then it should execute for you.