无法覆盖 AsyncTask 类中的 onPostExecute() 方法或使其触发
Posted
技术标签:
【中文标题】无法覆盖 AsyncTask 类中的 onPostExecute() 方法或使其触发【英文标题】:Can't Override onPostExecute() method in AsyncTask Class or get it to trigger 【发布时间】:2011-11-13 10:47:27 【问题描述】:在运行AsyncTask
时,我无法调用onPostExecute()
方法。当我尝试设置扩展 AsyncTask
的类时,其中 onPostExecute()
被覆盖,我收到以下构建错误。
'AsyncTaskExampleActivity 类型的方法 onPostExecute() 必须 覆盖或实现超类型方法'
我已经尝试摆脱 @Override
注释。这消除了构建错误,但该方法仍然没有执行。如果有人能指出我忽略了什么,我将不胜感激。
代码:
package com.asynctaskexample;
import android.os.AsyncTask;
public class AsyncTaskExampleActivity extends AsyncTask<Void, Void, Void>
AsyncTaskExampleActivity()
super();
@Override
protected void onPreExecute()
@Override
protected Void doInBackground(Void... params)
return null;
@Override
protected void onPostExecute()
【问题讨论】:
【参考方案1】:你应该添加 super.onPostExecute() 方法。例如:
@Override
protected void onPostExecute(Void nothing)
super.onPostExecute(nothing);
编辑:
伙计们,我不知道你为什么不赞成这个答案。提问者缺少onPostExecute()
方法的参数并且没有实现超类型方法。这就是我发布此答案的原因。
【讨论】:
他为什么要加呢?请说明原因?【参考方案2】:如果您希望 onPostExecute() 被覆盖,只需使用 doInBackground() 中返回的内容作为 onPostExecute() 中的对象。
例如...
@Override
protected void doInBackground(Void...args0)
// your code here...
return value;
@Override
protected void onPostExecute(void value)
//code to run
【讨论】:
【参考方案3】:OnPostExecute()
接受一个参数(您从doInBackground()
返回的对象)。将其更改为protected void onPostExecute(Void v)
。如果您不提供参数,则方法签名不匹配,并且覆盖注释开始抱怨没有函数可以使用此签名覆盖。
【讨论】:
【参考方案4】:试试:
在类中尝试右键单击Source -> Override/Implement methods..
并查找onPostExecute()
方法。它会给你完整的方法,如果它得到所有类型的参数。
【讨论】:
在 Android Studio 中你可以去菜单 Code -> Override Methods (Ctrl + O) 在新版本上,右键 -> 生成 -> 覆盖方法以上是关于无法覆盖 AsyncTask 类中的 onPostExecute() 方法或使其触发的主要内容,如果未能解决你的问题,请参考以下文章