Не удается переопределить метод onPostExecute () в классе AsyncTask или заставить его срабатывать - PullRequest
42 голосов
/ 09 сентября 2011

У меня проблемы с получением метода 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() {
    }
}

Ответы [ 4 ]

103 голосов
/ 09 сентября 2011

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

24 голосов
/ 09 сентября 2011

Попробуйте:

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

0 голосов
/ 14 февраля 2019

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

Например ...

    @Override
    protected void doInBackground(Void...args0){
        // your code here...
        return value;
    }
    @Override
    protected void onPostExecute(void value){
        //code to run
    }
0 голосов
/ 30 января 2015

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

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

EDIT: Ребята, я понятия не имею, почему вы отрицаете ответ. Опрашивающий пропускает аргумент метода onPostExecute() и не имеет реализованного метода супертипа. Вот почему я разместил этот ответ.

...