【发布时间】:2011-05-28 12:58:00
【问题描述】:
我不确定我做错了什么,但 onPostExecute 永远不会被调用。
- 创建了一个名为 BaseActivity.java 的基类
- 从我原来的 Activity 我扩展了这个类。
- 在 BaseActivity 中放置 PostToOpenFeint 类
-
从我正在做的主要活动的 UI 线程中调用它:
new PostToOpenFeint.execute();
onPreExecute()、doInBackground(..) 被触发,但由于某种原因,onPostExecute 永远不会被调用。
提前感谢您!
戴夫
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();
}
深入研究,这是我能够观察到的。例如,如果我拨打这个电话:
new PostToOpenFeint.execute();
在 Activity 的 onCreate 之后,一切正常。如果我将此调用放在按钮侦听器中。
settingsButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new PostToOpenFeint.execute();
}
});
onPostExecute() 永远不会被调用,不确定我做错了什么。我读到的限制是从 UI 线程调用它,我从 UI 线程调用它。
【问题讨论】:
-
请修正您的帖子标题:ActiveTask 应该替换为 AsyncTask
-
啊,谢谢你,好像有人抢了我。
-
你解决过这个问题吗?我现在有同样的问题。从按钮的 onClickListener 调用时的行为相同。
-
没关系,我没有在任务上调用 execute()(就像我对所有其他任务所做的那样),而是直接调用了 doInBackground()……我不知道这是怎么发生的。 :-P
-
@Bashorings 直接调用 doInBackground 不是一个好主意,它违背了异步任务从 UI 线程同步调用其所有方法的目的