Подтвердить что ты не робот

Как правильно начать работу с PostExecute в Android?

У меня есть AsyncTask, который заполняет собственный список с помощью проанализированных данных из Интернета.

В PostExecute я заполняю этот список и готов его перенести в новое действие.

Я делаю так:

@Override
protected void onPostExecute(List<VideoDataDescription> result) 
{
    super.onPostExecute(result);
    MainActivity.progressDialog.dismiss();

    context.startActivity(new Intent(context, ResultsQueryActivity.class));


}

где контекст

    private Context context;

В LogCat после выполнения этого кода я получаю исключение Java.lang.NullPointerException. Возможно ли и правильно ли запустить Activity, как я это делаю?

UPD Я добавил

    private Context mContext;


public YoutubeAndYahooParser(Context context) 
{
    super();
    this.mContext = context;
}

для инициализации контекста и вызова

YoutubeAndYahooParser youtubeAndYahooParser = new YoutubeAndYahooParser(ResultsQueryActivity.this);
                    youtubeAndYahooParser.execute("my string to pass in asynctak");

После этого в PostExecute

Intent intent = new Intent(mContext, ResultsQueryActivity.class);
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 mContext.startActivity(intent);    

Я добавил новый флаг из-за того, что у меня есть в LogCat следующее:

* Для вызова функции startActivity() из контекста Activity требуется флаг FLAG_ACTIVITY_NEW_TASK. Это действительно то, что вы хотите? *

Я прав?

4b9b3361

Ответ 1

Вы должны передать контекст приложения, а не контекст из локальной активности. То есть используйте context.getApplicationContext() и сохраните его в локальной переменной в подклассе AsyncTask.

Код может выглядеть примерно так:

public class MyAsyncTask extends AsyncTask {

    Context context;
    private MyAsyncTask(Context context) {
        this.context = context.getApplicationContext();
    }

    @Override
    protected Object doInBackground(Object... params) {
        ...
    }

    @Override
    protected void onPostExecute(List<VideoDataDescription> result) {
        super.onPostExecute(result);
        MainActivity.progressDialog.dismiss();

        context.startActivity(new Intent(context, ResultsQueryActivity.class));
    }
}

вы бы назвали это следующим образом:

   new MyAsyncTask(context).execute();

Ответ 2

Я попробовал это сейчас... он работает в методе PostExecute!!!

Intent intent_name = new Intent();
intent_name.setClass(getApplicationContext(),DestinationClassName.class);
startActivity(intent_name);