Как показать тост в AsyncTask в doInBackground
В одном из моих действий я использую AsyncTask
. В doInBackground()
я звоню на различные методы. В одном из этих методов я получаю исключение, поэтому в блоке catch я хочу показать ошибку в Toast.
Я знаю, что могу использовать Log
, но все же предпочитаю Toast.
Итак, как я могу использовать Toast в AsyncTask в doInBackground()?
Ответы
Ответ 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();
}
});
}