Java: создание подклассов AsyncTask - PullRequest
5 голосов
/ 25 января 2012

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

    import android.content.Context;
    import android.os.AsyncTask;

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

    }

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

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

Ответы [ 3 ]

16 голосов
/ 25 января 2012

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

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

}
6 голосов
/ 26 января 2012

Спасибо, Рувим, он работает на 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

2 голосов
/ 25 января 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...