Как правильно запустить активность из PostExecute в Android?
34964 просмотра
3 ответа
У меня есть 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. Это действительно то, что вы хотите? *
Я прав?
Автор: Eugene Shmorgun Источник Размещён: 12.11.2019 09:51Ответы (3)
43 плюса
Вы должны передать контекст приложения, а не контекст локальной активности. Т.е. используйте 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();
Автор: dhaag23
Размещён: 02.02.2012 07:03
18 плюса
Я попробовал это только сейчас ... это работает в методе PostExecute !!!
Intent intent_name = new Intent();
intent_name.setClass(getApplicationContext(),DestinationClassName.class);
startActivity(intent_name);
Автор: user2162383
Размещён: 16.03.2013 12:25
0 плюса
Но лучше, если вы начнете новое намерение на основе ответа (результата), полученного в результате предыдущих действий.
Это исключит возможность отклика на ошибку при вызове нового намерения.
Пример, если предыдущее действие должно было возвращаться Успешно ... или Добро пожаловать, чтобы разрешить запуск нового намерения, я мог проверить это таким образом
protected void onPostExecute(String result) {
if (result.equals("Succesfully...")){
context.startActivity(new Intent(context, Login_Activity.class));
Toast.makeText(context, result, Toast.LENGTH_LONG).show();
}else if (result.contains("Welcome")){
context.startActivity(new Intent(context, MainActivity.class));
}else {
Toast.makeText(context,result,Toast.LENGTH_LONG).show();
}
}
Автор: eLi
Размещён: 26.06.2018 07:39
Вопросы из категории :
- android Насколько хорошо отражает эмулятор Android Phone?
- android Как сохранить состояние активности Android с помощью сохранения состояния экземпляра?
- android Android: доступ к дочерним представлениям из ListView
- android Как вызвать SOAP веб-сервис на Android
- android Как вы форматируете дату и время в Android?
- android Android: Получение имени файла с камеры?
- android-activity Перезапуск активности при ротации Android
- android-activity Передача пакета на startActivity ()?
- android-activity Как перемещаться с одного экрана на другой экран
- android-activity Как обрабатывать изменение ориентации экрана, когда диалог выполнения и фоновый поток активны?
- android-activity Как установить рингтон в Android из моей активности?
- android-asynctask AsyncTask и обработка ошибок на Android
- android-asynctask Скачайте файл с Android и покажите прогресс в ProgressDialog
- android-asynctask CalledFromWrongThreadException: только исходный поток, создавший иерархию представлений, может касаться представлений
- android-asynctask Как отобразить тост в Android?
- android-asynctask Одновременное использование нескольких AsyncTasks - невозможно?
- android-asynctask Обновление диалогового окна прогресса в Activity из AsyncTask