Intereting Posts
Как вы определяете задержку звука (AudioTrack) на Android? Когда вы вызываете initLoader во Фрагменте? Android: Как переключаться между такими действиями, как переключение настольных компьютеров в Home app? Ошибка регистрации Spotify INVALID_CLIENT: Недействительный URI-адрес перенаправления Phonegap 2.1 для Android – ошибки Hello World App 3 при запуске Как создать интерфейс между фрагментом и адаптером? Приемник вещания для Android не получает намерения Очистить задний стек с помощью фрагментов ActionBarCompat + NavigationDrawerFragment не работает на Android 4.0 и 4.1 Невозможно повторить запрос с неповторяемым объектом запроса Значок приложения Android Launcher не обновлен до нового значка после обновления рынка Панель действий Android с видом поиска Как я могу начать новую деятельность в качестве затраченного круга из центра Импорт не может быть разрешен: import com.google.android.maps. *; ProGuard вызывает задержку применения

Как правильно начать работу с 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. Возможно ли и правильно ли начать работу, как я это делаю?

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. Это действительно то, что вы хотите? *

Я прав?

Solutions Collecting From Web of "Как правильно начать работу с PostExecute в Android?"

Вы должны передать контекст приложения, а не контекст из локальной активности. Т.е. используйте 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(); 

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

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