Поднятие тоста из 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) 

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

С уважением

Intereting Posts
Поддержка всех решений для планшетов Android «Текст ввода оболочки adb» имитирует ввод программной клавиатуры? Преобразование дат UTC в другие часовые пояса Отображение изображений из URL в Listview Множественный выбор AlertDialog с пользовательским адаптером Какой код CSS я использую, чтобы получить мою веб-страницу, чтобы заполнить экран на iPhone или Android? Полоса прокрутки не отображается в RecyclerView Как реализовать анимированные векторные чертежи с помощью библиотеки поддержки дизайна 23.2? Как я могу прочитать манифест файла apk для Android с помощью C # .Net? Android – время жизни различных вариантов хранения Добавление панели инструментов в FragmentActivity Изменение фонов ActionBar и SearchView Android: EditText не может получить фокус после повторного включения Содержимое Uri: // media / external / file не существует для некоторых устройств Можно ли разделить мое интернет-соединение с ПК на андроид через usb?