2015-03-07 3 views
1

Я знаю, что есть несколько вопросов, которые очень похожи на этот, но мне пока это не помогло. Я все еще не могу переопределить эту AsyncTasks. Можете ли вы мне помочь?Невозможно переопределить метод onPostExecute() в классе AsyncTask

Я уже убедился, что doInBackground() devlivers некоторый тип, который требует onPostExecute() (логический в первом и JSON во втором примере).

Вы видите что-нибудь кроме того, что я продлить AsyncTask в качестве сырья типа (не был уверен, что ввести здесь)

Это затмение ошибка говорит мне, для каждого метода:

Метод onPostExecute (Boolean) типа Register.NetCheck должен переопределить или реализовать метод Supertype

и для классов затмить говорит мне:

  • Тип 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(); 
     } 

} 

ответ

1

Ваша асинхронной задача не ожидает возвращаемое значение, так это не признается

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 для автоматического внедрения методов для вас, избегайте таких проблем.

+0

Не могли бы вы рассказать мне, зачем использовать 'doInBackground (Void ... params)' вместо моей версии с 'doInBackground (String ... args)'. Просто для вашего уведомления: я скопировал эти коды из какого-либо другого места и попытался приспособить его ко мне нужды – Krummy

+0

Жаль, что я этого не заметил, плохо отредактировал свой ответ –

+0

Сделал поправки @Krummy –

1

Вы должны расширить 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 с соответствующими типами. Дополнительная информация: here. Об Eclipse. Удалите и установите Android Studio.

+0

не могли бы вы объяснить мне, почему shell я использую типы '' вместо, например,. '' или как тот, с другим ответом говорит ''? – Krummy

+0

Первый параметр, String указывает, что вы передадите строку в качестве параметра в задание при выполнении, второе - Object, представляет единицы прогресса, которые будут опубликованы во время выполнения задачи, а третий представляет тип результата асинхронная задача будет производить –

+0

Я только что понял эту вещь намного больше, чем несколько минут назад! : D Спасибо большое за очень быстрый ответ! – Krummy

Смежные вопросы