запустить Activity из Asynctask

Я знаю, что на этот вопрос уже отвечали несколько раз, и я прочитал большинство из них, но я не понимаю, почему они не работают для меня.

Я создаю что-то вроде Webcrawler, поэтому у меня есть Asynctask, который анализирует HTML-код для нужных мне переменных в одном классе.

Я знаю, что хочу запустить асинтаск через OnClick, что не является проблемой, но я хочу начать другое действие после того, как асинтаск проанализировал HTML-код.

Поскольку это асинтаск, я подумал, что было бы лучше запустить Activity в OnPostExecute.

Мой код очень простой и простой, но я не знаю, почему у меня с ним проблемы.

@Override
    protected void onPostExecute(String result){
        if(dialog.isShowing()){
            dialog.dismiss();
        }
        startActivity(new Intent(context, DetailView.class));
    }

контекст - это переменная, в которой у меня есть контекст MainActivity, и это прекрасно работает для меня в разных точках Asynctask для создания Toast.

DetailView.class — это активность, которую я хочу запустить, и которая отлично работает из MainActivity, но не в этом месте.

Проблема в том, что компилятор говорит мне, что он ожидает android.app.Activity, а фактический аргумент - «новое намерение (контекст, DetailView.class)»

Прошу прощения за такой простой и уже часто отвеченный вопрос, но я не знаю, как заставить его работать.

Спасибо за любой ответ.


person Carsten Berensmeier    schedule 12.04.2015    source источник
comment
является ли ваш AsyncTask внутренним классом? Является ли внешний класс расширением Activity?   -  person Blackbelt    schedule 12.04.2015
comment
Я думаю, вы используете this контекст. Вы пытались заменить его на getBaseContext() или MyActivity.this?   -  person Anggrayudi H    schedule 12.04.2015
comment
он падает? в чем ошибка? также опубликуйте весь свой код и logcat   -  person Heshan Sandeepa    schedule 12.04.2015


Ответы (4)


Идеальный черный пояс, мой внешний класс не расширял активность, это было решением. Спасибо

person Carsten Berensmeier    schedule 12.04.2015

Вы не можете обновить пользовательский интерфейс в фоновом потоке. Отображение всплывающих уведомлений и диалогов — это способ обновления пользовательского интерфейса.

Вы можете publishProgress(...) в методе doInBackground() и обновить пользовательский интерфейс в onProgressUpdate()

person Robust    schedule 12.04.2015
comment
Отображение Toast не является проблемой, обертывание его в Handler работает. Тосты также отображаются в диалоговом окне, но активность DetailView не работает. - person Carsten Berensmeier; 12.04.2015

Задача решена:

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

Это работает сейчас, но я не знаю, почему.

person Carsten Berensmeier    schedule 12.04.2015

Есть много ответов, но я использую это для своих приложений:

Intent intent = new Intent(mContext, mainmenu.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            mContext.startActivity(intent);
person Kshitij Jhangra    schedule 03.10.2018