Intereting Posts
Телефонные звонки уменьшают размер изображения Scala на Android: java.lang.NoSuchMethodError: java.lang.String.isEmpty Есть ли в андроиде прослушиватель по умолчанию (на устройстве) по умолчанию? Создание минимизированной банки с использованием только используемых классов Кнопка и доступная слева Как сохранить приложение в фоновом режиме? Продолжать собирать данные? Только ретранслировать детей и не все дерево Действие масштабирования в android с помощью appium-python-client Пустой экран перед брызгом Как оживить фон ActionMode ActionBar? Java.lang.SecurityException: отказ от разрешения: getIntentSender () при использовании UiAutomation в тесте Как я могу использовать библиотеки поддержки v4 и v13 в одном проекте? Как добавить ярлык на главный экран в android программно Скрыть клавиатуру при переходе от фрагмента к другому Ошибка: выполнение выполнено для задачи ': lib: compileReleaseAidl'. > Executor Singleton не запущен

Завершите вызов, когда AsyncTask завершает работу

Моя вызывающая деятельность:

public class Hello extends Activity { public void onCreate(Bundle savedInstanceState) { MyTask mt = new MyTask(this); mt.execute(); } 

Теперь в MyTask (внешний класс):

 public class MyTask extends AsyncTask<Void, Void, Void> { private Context mContext; public MyTask(Context context) { mContext = context; } //doinbackground, etc protected void onPostExecute() { mContext.finish(); } 

Другие вещи работают, как ожидается, если я удалю mContext.finish() выше.
Но если я mContext.finish() , я получаю сообщение об ошибке: The method finish() is undefined for the type Context (Eclipse не показывает finish (), когда я пишу mContext. Используя финиш () неправильно.)

Что мне нужно сделать, чтобы закончить вызывающую активность Hello после того, как MyTask выполнит задачу

Solutions Collecting From Web of "Завершите вызов, когда AsyncTask завершает работу"

 ((Activity)mContext).finish(); 

Будет ли правильный способ передать Context в действие и вызвать его метод finish() . Не знаете, почему вы хотите завершить Activity из AsyncTask хотя

Что вы можете попытаться сделать, а не вызвать context.finish (), почему бы вам не сделать интерфейс обратного вызова следующим образом:

 public interface TaskCallback{ void done(); } 

Затем вы реализуете это в своей деятельности

 public Hello extends Activity implements TaskCallback{ .....BUNCH OF ACTIVITY CODE..... public void onCreate(Bundle savedInstanceState) { MyTask mt = new MyTask(this); mt.execute(); } public void done() { finish(); } } 

И вместо того, чтобы иметь контекст как параметр, у вас есть TaskCallback

 public class MyTask extends AsyncTask<Void, Void, Void> { private TaskCallback mCallback; public MyTask(TaskCallback callback) { mCallback = callback; } //doinbackground, etc protected void onPostExecute() { mCallback.done(); } 

Там вы идете, это дает вам больше гибкости при настройке каждой реализации.

У меня такая же ситуация, тогда я делаю следующее:

 public class MyTask extends AsyncTask<Void, Void, Void> { private Activity mActivity; private Context mContext; public MyTask(Activity activity) { mActivity = activity; mContext = mActivity.getApplicationContext(); } //doinbackground, etc protected void onPostExecute() { mActivity.finish(); } 

Надеюсь, что это поможет 🙂

Определите метод в вашем классе активности следующим образом:

 public void FinishAfterAsyncTask() { this.finish(); } 

И вызовите этот метод из метода AsynTask класса AsynTask .

Вы можете создать новую приватную AsyncTask, расширенную от вашего общего.

В этой частной AsyncTask у вас есть доступ к материалам Activity, и вы можете переопределить метод onPostExecute для его завершения.

Ваша истинная AsyncTask

 public class MyPublicAsyncTask extends AsyncTask<Void, Void, Void> { Context context; public GetHorariosAsyncTask(Context ctx){ context = ctx; } @Override protected void onPreExecute() { super.onPreExecute(); // prepare yourself for an async work } @Override protected Void doInBackground(Void... params) { // Do yout cool async stuff } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); // you're finish, let's tell to user } } 

Ваша деятельность с помощью частной AsyncTask

 public class MyActivity extends Activity { Activity mAct; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); mAct = this; } private class MyPrivateAsyncTask extends MyPublicAsyncTask { public MyPrivateAsyncTask(Context ctx) { super(ctx); // TODO Auto-generated constructor stub } @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub super.onPostExecute(result); // our async task is completed! let's take care of this activity mAct.finish(); } } } 

Ты можешь попробовать

 this.finish() 

Похоже на то, что он вызвал его с помощью mContext, что он говорит undefined.