AsyncTask onPostExecute 永远不会被调用

编程入门 行业动态 更新时间:2024-10-27 20:26:45
本文介绍了AsyncTask onPostExecute 永远不会被调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我不确定我做错了什么,但是 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:

new PostToOpenFeint.execute();

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 永远不会被调用

本文发布于:2023-11-08 09:40:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1569024.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:永远不会   AsyncTask   onPostExecute

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!