AsyncTask как отдельный класс

Рейтинг: 2Ответов: 2Опубликовано: 05.11.2014

Здравствуйте!

Помогите найти урок или поясните возможность реализации класса, наследующего AsyncTask как самостоятельного, а не в теле другого. И возможно ли это?

Ответы

▲ 9Принят

@ЮрийСПб, @Kvazio вот вам пример с листненерами(callback), а @Suvitruf прав, так правильно.

public class Foo extends AsyncTask<Void, Void, Void> {

    private MyCustomCallBack callback;

    public Foo(final MyCustomCallBack callback) {
        this.callback = callback;
    }

    @Override
    protected Void doInBackground(Void... arg0) {
        // do what you want

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        if(callback!=null)
            callback.doSomething(result);
    }

    public interface MyCustomCallBack
    {
        public void doSomething(Void someResult);
    }
}

public class MyActivity extends Activity implements Foo.MyCustomCallBack
{
    @Override
    protected void onCreate(final Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        Foo foo = new Foo(this);
        foo.execute();
    }

    @Override
    public void doSomething(Void someResult)
    {
        //этот метод вызовется, когда у asynctask'а вызовется метод onPostExecute
    }
}
▲ 2

Пожалуйста, привожу Вам полный код, редактируйте по своему усмотрению.

public class Foo extends AsyncTask<Void, Void, Void> {

    private String mName;
    private TextView mTextView;

    public Foo(TextView textView, String name) {
        super();

        mTextView = textView;
        mName = name;
    }

    @Override
    protected Void doInBackground(Void... arg0) {
        // do what you want

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);

        mTextView.setText(mName);
    }

}