Поднятие тоста из AsyncTask

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

EDIT: отображение кода ниже

@Override protected void onProgressUpdate(String... strings){ Toast toast = Toast.makeText(MainActivity.this, strings[0], Toast.LENGTH_LONG); toast.show(); } 

MainActivity.this говорит: «Нет экземпляра экземпляра типа MainActivity доступен в области видимости». Я не уверен, что передать как контекст.

благодаря

Получите объект Context , вызвав getApplicationContext() из MainActivity и передайте его как параметр вашей AsyncTask . Как отметил MainActivity.this , MainActivity.this будет работать, только если ваш AsyncTask является внутренним классом.

Если это не внутренний класс, объявленный в пункте использования, то MainActivity.this , скорее всего, будет недоступен. Единственный способ исправить проблему – подкласс AsyncTask и изменить конструктор, чтобы принять переменную контекста, чтобы вы могли установить его в своем пользовательском классе и использовать его из методов. Использование getApplicationContext может работать, но я не уверен, как он будет себя вести.

Вы не можете сделать это в onProgressUpdate() . По крайней мере, не так. Если Eclipse дает вам эту ошибку, это потому, что MainActivity.this для него неразрешима. Зачем? Поскольку вы НЕ находитесь в потоке пользовательского интерфейса, то, что вы делаете, не является потокобезопасным, потому что вы не должны обращаться к пользовательскому интерфейсу из другого потока.

Прежде всего, как уже говорилось ранее, вы должны написать конструктор, который использует контекст и сохраняет его в глобальной переменной, поэтому он доступен везде внутри класса. Затем для доступа к пользовательскому интерфейсу поточно-безопасным способом используйте одно из следующих:

 Activity.runOnUiThread(Runnable) View.post(Runnable) View.postDelayed(Runnable, long) 

Это поточно-безопасные.

С уважением