Не може да се замени методът onPostExecute() в клас AsyncTask

Знам, че има няколко въпроса, които са доста подобни на този, но досега не ми помогнаха. Все още не мога да отменя тази AsyncTasks. можеш ли да ми помогнеш

Вече се уверих, че doInBackground() devlivers някакъв тип, който onPostExecute() изисква (Boolean в първия и JSON във втория пример).

Виждате ли нещо освен това, че разширявам AsyncTask като необработен тип (не бях сигурен какво да въведа тук)

Това е грешката, която eclipse ми казва за всеки метод:

Методът onPostExecute(Boolean) от тип Register.NetCheck трябва да замени или внедри метод на супертип

и за класовете eclipse ми казва:

  • Типът Register.NetCheck трябва да имплементира наследения абстрактен метод AsyncTask.doInBackground(Object...)

  • AsyncTask е необработен тип. Препратките към общ тип AsyncTask трябва да бъдат параметризирани

ПРИМЕР 1:

private class NetCheck extends AsyncTask {

        @Override
        protected void onPreExecute(){
            super.onPreExecute();
            do.something();
        }

        @Override
        protected Boolean doInBackground (String... args){
               if (do.something.worked){
                   return true; }
               else { return false}
        }

        @Override
        protected void onPostExecute(Boolean th){
            evalute.input.boolValue();
        }
    }

ПРИМЕР 2:

private class ProcessRegister extends AsyncTask {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            show.some.dialog();
        }
        @Override
        protected JSONObject doInBackground(String... args) {
        JSONObject json = generate.some.json();
            return json;
        }
        @Override
        protected void onPostExecute(JSONObject json) {
           evaluate.something();
        }

}

person Krummy    schedule 07.03.2015    source източник


Отговори (2)


Вашата асинхронна задача не очаква върната стойност, така че не разпознава

protected void onPostExecute(Boolean th)

Опитайте това вместо това:

private class NetCheck extends AsyncTask<String, Void, Boolean> {

    @Override
    protected void onPreExecute(){
        super.onPreExecute();
        do.something();
    }

    @Override
    protected Boolean doInBackground (String... args){
           if (do.something.worked){
               return true; }
           else { return false}
    }

    @Override
    protected void onPostExecute(Boolean th){
        evalute.input.boolValue();
    }
}

Заменете Boolean с JSONObject за втория пример. Опитайте се винаги да използвате IDE за автоматично прилагане на методите за вас, ще избегнете проблеми като този.

person Joe Maher    schedule 07.03.2015
comment
можете ли да ми кажете защо да използвам doInBackground (Void... params) вместо моята версия с doInBackground (String... args). Само за ваше внимание: копирах този кодов фрагмент от някъде другаде и се опитах да го напасна към нуждите си - person Krummy; 07.03.2015
comment
Направи промените @Krummy - person Joe Maher; 07.03.2015

Трябва да разширите AsyncTask с типове. Вижте примера по-долу.

public class MyTask extends AsyncTask<Void, String, Integer> {
    @Override
    protected Integer doInBackground(Void... params) {
        return null;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(Integer integer) {
        super.onPostExecute(integer);
    }

    @Override
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected void onCancelled(Integer integer) {
        super.onCancelled(integer);
    }

    @Override
    protected void onCancelled() {
        super.onCancelled();
    }
}

Заменя Void, String, Integer с подходящи типове. Повече информация е тук. Относно Eclipse. Изтрийте и инсталирайте Android Studio.

person localhost    schedule 07.03.2015
comment
можете ли да ми обясните защо shell използвам типовете <void, void, void> вместо напр. <String, Object, Boolean> или като този с другия отговор каза <Void, Void, Boolean>? - person Krummy; 07.03.2015
comment
Първият параметър, String, показва, че ще подадете низ като параметър в задачата, когато се изпълнява, вторият, Object, представлява единиците за напредък, които ще бъдат публикувани, докато задачата се изпълнява, а третият представлява какъв тип резултат, който асинхронната задача ще произведе - person Joe Maher; 07.03.2015
comment
Току-що разбрах всичко това много повече отпреди няколко минути! :D Много ви благодаря за много бързия отговор! - person Krummy; 07.03.2015
comment
Това трябва да проработи намирането сега: onPostExecute(JSONObject s) - person Akhil Sahu; 21.10.2019