Невозможно переопределить метод onPostExecute() в классе AsyncTask или заставить его запускаться

У меня возникли проблемы с вызовом метода onPostExecute() при запуске AsyncTask. Когда я пытаюсь настроить свой класс, расширяющий AsyncTask, в котором onPostExecute() переопределен, я получаю следующую ошибку сборки.

«Метод onPostExecute() типа AsyncTaskExampleActivity должен переопределять или реализовывать метод супертипа»

Я попытался избавиться от аннотации @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() {
    }
}

person Ben    schedule 09.09.2011    source источник


Ответы (4)


OnPostExecute() принимает аргумент ( объект, который вы возвращаете из doInBackground()). Измените его на protected void onPostExecute(Void v). Если вы не предоставите аргумент, сигнатуры методов не совпадают, и аннотация переопределения начнет жаловаться, что нет функции для переопределения с этой сигнатурой.

person Community    schedule 09.09.2011

Пытаться:

В классе попробуйте щелкнуть правой кнопкой мыши Source -> Override/Implement methods.. и найти метод onPostExecute(). Это даст вам полный метод со всеми типами аргументов, если он будет получен.

person Nikola Despotoski    schedule 09.09.2011
comment
В Android Studio вы можете перейти в меню Код -> Методы переопределения (Ctrl + O) - person ; 13.05.2016
comment
В новой версии щелкните правой кнопкой мыши -> Создать -> Переопределить методы. - person Sandip Subedi; 23.03.2017

если вы хотите, чтобы ваш onPostExecute() был перегружен, просто используйте то, что было возвращено в вашем doInBackground(), в качестве объекта в вашем onPostExecute().

Например...

    @Override
    protected void doInBackground(Void...args0){
        // your code here...
        return value;
    }
    @Override
    protected void onPostExecute(void value){
        //code to run
    }
person hacking diablo    schedule 14.02.2019

Вы должны добавить метод super.onPostExecute(). Например:

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

РЕДАКТИРОВАТЬ: Ребята, я понятия не имею, почему вы отрицаете ответ. У спрашивающего отсутствует аргумент метода onPostExecute() и не реализован метод супертипа. Вот почему я опубликовал этот ответ.

person Ayaz Alifov    schedule 30.01.2015
comment
Зачем ему это добавлять? Уточните, пожалуйста, причины? - person FanaticD; 29.08.2015