无法重写AsyncTask类中的onPostExecute()方法或使其触发

46

我在运行一个 AsyncTask 时,无法让 onPostExecute() 方法被调用。当我尝试创建一个类来扩展 AsyncTask 并且重写了 onPostExecute() 方法时,我遇到了以下构建错误。

'The method onPostExecute() of type AsyncTaskExampleActivity must override or implement a supertype method'

我尝试去掉 @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() {
    }
}
4个回答

108

OnPostExecute()接受一个参数(从doInBackground()返回的对象)。将其更改为protected void onPostExecute(Void v)。如果您不提供参数,则方法签名不匹配,重写注释开始抱怨找不到具有此签名的要覆盖的函数。


24

尝试:

在类 try 中,右键单击 Source -> Override/Implement methods.. 并查找 onPostExecute() 方法。它将提供包含所有参数类型的完整方法。


1
在Android Studio中,您可以转到菜单Code -> Override Methods(Ctrl + O)。 - user2998046
在新版本中,右键单击 -> 生成 -> 覆盖方法 - Sandip Subedi

0
如果你想重写你的onPostExecute(),只需在你的doInBackground()中返回一个对象,并将其作为参数传递到你的onPostExecute()中。
例如...
    @Override
    protected void doInBackground(Void...args0){
        // your code here...
        return value;
    }
    @Override
    protected void onPostExecute(void value){
        //code to run
    }

-1

你应该添加 super.onPostExecute() 方法。例如:

@Override
protected void onPostExecute(Void nothing)
{
   super.onPostExecute(nothing);
}

编辑: 各位,我不知道为什么你们要对这个答案进行负评。提问者缺少onPostExecute()方法的参数,并且没有实现超类型方法。这就是我发布这个答案的原因。


3
他为什么要添加它?您能否说明一下原因? - FanaticD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接