Java: подклассификация AsyncTask

Я пытаюсь подклассифицировать класс android.os.AsyncTask в общем случае. Я просто хочу добавить к нему свойство. Дело в том, что я все еще хочу использовать его как анонимный класс.

import android.content.Context; import android.os.AsyncTask; public class KAsyncTask extends AsyncTask<Params, Progress, Result> { public Context c; } 

Я пробовал подклассифицировать его, но я просто не могу обернуть его вокруг головы, как я должен это делать.

С уважением, EZFrag

Вы имеете в виду, что вы все еще хотите, чтобы это был абстрактный шаблонный класс, такой как AsyncTask? Декларация будет следующей:

 public abstract class KAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> { public Context c; } 

Благодаря Reuben, он работает на 100%, как ожидалось.

Вот что у меня есть сейчас:

  import android.content.Context; import android.os.AsyncTask; public abstract class KAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> { public Context context; public KAsyncTask<Params, Progress, Result> setContext(Context c){ this.context = c; return this; } } 

И вот как я его использую:

  new KAsyncTask<Void, Void, Void>() { @Override protected void onPreExecute() { // TODO Auto-generated method stub Toast.makeText(context, "Connecting to Server...", Toast.LENGTH_LONG).show(); } @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub //super.onPostExecute(result); Toast.makeText(context, "Responce Recieved.", Toast.LENGTH_LONG).show(); } @Override protected Void doInBackground(Void... params) { // TODO Auto-generated method stub //Do webservice calls in here return null; } }.setContext(this).execute(); 

Мне нужен контекст для отображения сообщений пользователю из самой задачи.

С уважением, EZFrag

Если я правильно понял ваш вопрос, вы ищете способ создания анонимной внутренней AsyncTask которая также имеет переменную экземпляра. Как вы планируете передать это дополнительное значение AsyncTask ?

AFAIK, Java не позволяет переопределить конструктор анонимного внутреннего класса. Поэтому ваша единственная надежда состоит в том, чтобы перейти в Context как часть типа Params (который, оказывается, Varargs). Это означает, что вы должны сделать тип Params как Context ; Или используйте String и serialize / Parcel ваш Context как String . Я честно чувствую, что это не стоит усилий и слишком много взлома.

Есть ли причина, по которой вы хотите использовать анонимную AsyncTask ? Я просто предлагаю вам создать именованную реализацию AsyncTask .