Как показать тост в AsyncTask в doInBackground

В одном из моих действий я использую AsyncTask . В doInBackground() я doInBackground() на различные методы. В одном из этих методов я получаю исключение, поэтому в блоке catch я хочу показать ошибку в Toast. Я знаю, что могу использовать Log , но все же предпочитаю Toast. Итак, как я могу использовать Toast в AsyncTask в doInBackground ()?

Вы можете обернуть Toast в runOnUIThread() но это не лучшее решение.
Вы должны установить логический флаг в блоке catch при возникновении ошибки, а затем отобразить соответствующий Toast в onProgressUpdate() , onPostExecute() или любой другой метод с доступом к пользовательскому интерфейсу всякий раз, когда флаг является true .

Вернуться из doInBackground как

 protected String doInBackground(String... params){ //some code try{ //some code }catch(Exception e){ return "Exception Caught"; } return someValidResult; } protected void onPostExecute(String result){ if(result.equalsIgnoreCase("Exception Caught")){ //Display Toast }else{ // // whatever you wana do with valid result } } 

Напишите следующий код, где вы должны показывать тост в doInBackground()

 runOnUiThread(new Runnable() { public void run() { Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show(); } }); 
  • BTW: если вы используете Fragments , вам нужно вызвать runOnUiThread(...) через вашу активность:

getActivity().runOnUiThread(...)

Создайте объект-обработчик и выполните все ваши сообщения Toast, используя это.

 @Override protected Void doInBackground(Void... params) { Handler handler=new handler(); handler= new Handler(context.getMainLooper()); handler.post( new Runnable(){ public void run(){ Toast.makeText(context, "Created a server socket",Toast.LENGTH_LONG).show(); } }); } 

Вы можете отобразить его в методе, который имеет доступ к потоку пользовательского интерфейса, например onPreExecute() , onProgressUpdate() и onPostExecute()

 runOnUiThread(new Runnable() { public void run() { Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show(); } }); 

Работает отлично, чтобы показать тост в doInBackground ()

 activity.runOnUiThread(new Runnable() { public void run() { Toast.makeText(activity, "Toast teaxt", Toast.LENGTH_SHORT).show(); } }); 

Попробуйте этот код

 void showError(final String err) { runOnUiThread(new Runnable() { public void run() { Toast.makeText(downloadprogress.this, err + "error in download", Toast.LENGTH_LONG) .show(); } }); }