Я пытаюсь подклассифицировать класс 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
.