我不确定我做错了什么,但是 onPostExecute 永远不会被调用.
I am not sure what I am doing wrong but onPostExecute never gets called.
- 创建了一个名为 BaseActivity.java 的基类
- 从我原来的 Activity 中,我扩展了这个类.
- 在 BaseActivity 中放置 PostToOpenFeint 类
从我正在做的主要活动的 UI 线程中调用它:
- 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:
onPreExecute()、doInBackground(..) 被触发,但由于某种原因 onPostExecute 从未被调用.
The onPreExecute(), doInBackground(..) gets triggered, but for some reason the onPostExecute never gets called.
提前谢谢您!
戴夫
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();在 Activity 的 onCreate 之后,一切正常.如果我将此调用放在按钮侦听器中.
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(); } });onPostExecute() 永远不会被调用,不知道我做错了什么.我读到的限制是从 UI 线程调用它,我从 UI 线程调用它.
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.
推荐答案我刚才遇到了类似的问题.我正在扩展 AsyncTask 并且我的 onPostExecute 方法看起来像:
I had a similiar problem just now. I was extending AsyncTask<Integer,Integer,Integer> and my onPostExecute method looked like:
protected void onPostExecute(int result)这对我来说似乎没问题,但话说回来,我更像是一个 .NET 人,而不是一个 Java 人.我改成:
This seemed OK to me, but then again I'm more of a .NET guy than a Java guy. I changed it to:
protected void onPostExecute(Integer result)因为某种原因,Java 认为 int 和 Integer 之间有区别?
because for some reason Java thinks there is a difference between int and Integer?
我认为您的问题是您将返回类型声明为 void 在您的:
I think that your problem is that you're declaring the return type as void in your:
extends<Void,Void,Void>这意味着没有参数,没有进展,也没有结果.如果你想在完成后执行某事,我认为你需要给它某种值,如整数或布尔值.
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.
如果您将扩展更改为:
<Void,Void,Integer>现在您不传递参数,不发布任何进度,而是返回一个值.更改您的 onPostExecute 方法以接受 Integer:
Now your passing no params, not publishing any progress, but are returning a value. Change your onPostExecute method to accept an Integer:
protected void onPostExecute(Integer result)然后将 doInBackground 方法中的返回值更改为:
Then change the return in your doInBackground method to something like:
return 1;然后它应该为您执行.
更多推荐
AsyncTask onPostExecute 永远不会被调用
发布评论