Как правильно начать работу с 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. Это действительно то, что вы хотите? *
Я прав?
Ответы
Ответ 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);