Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ответ 2

вернуться из 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
    }
}

Ответ 3

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

runOnUiThread(new Runnable() {

public void run() {

  Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show();

   }
});
  • BTW: если вы используете Fragments, вам нужно вызвать runOnUiThread(...) через вашу активность:

getActivity().runOnUiThread(...)

Ответ 4

Создайте объект-обработчик и выполните все ваши сообщения 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(); 
        }
    });
  }

Ответ 5

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

Ответ 6

runOnUiThread(new Runnable() {

public void run() {

  Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show();

   }
}); 

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

Ответ 7

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

Ответ 8

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

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