无法覆盖 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 -&gt; Override/Implement methods.. 并查找onPostExecute() 方法。它会给你完整的方法,如果它得到所有类型的参数。

【讨论】:

在 Android Studio 中你可以去菜单 Code -> Override Methods (Ctrl + O) 在新版本上,右键 -> 生成 -> 覆盖方法

以上是关于无法覆盖 AsyncTask 类中的 onPostExecute() 方法或使其触发的主要内容,如果未能解决你的问题,请参考以下文章

如何从android中的AsyncTask类中获取数据?

在任何地方使用我的 AsyncTask 类中的变量

如何在Android中强制停止AsyncTask [重复]

无法在Asynctask Android,java中调用View

我如何从AsyncTask中的数据库类中获取对象?

无法在 Razor 页面中调用 onPost