Как поднять тост в AsyncTask, мне предлагается использовать Looper
У меня есть задачи, выполненные AsyncTask в фоновом режиме. В какой-то момент мне нужно выпустить тост, чтобы что-то было завершено.
Я пробовал, и я потерпел неудачу, потому что
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Как я могу это сделать?
Ответы
Ответ 1
onPostExecute - выполняется в потоке пользовательского интерфейса
или
publishProgress()
; в вашем doinbackground и
protected void onProgressUpdate(Integer... progress) {
}
http://developer.android.com/reference/android/os/AsyncTask.html
Ответ 2
Вы также можете использовать runOnUiThread, чтобы управлять своим пользовательским интерфейсом из фоновых потоков.
Ответ 3
вы можете Toast внутри doInBackground
добавьте этот код, в котором вы хотите видеть тосты
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(<your class name>.this, "Cool Ha?", Toast.LENGTH_SHORT).show();
}
});
Ответ 4
Если вы хотите использовать Toast
Вы должны использовать этот метод: onProgressUpdate()
protected Integer doInBackground(Void...Params) {
int check_point = 1;
publishProgress(check_point);
return check_point;
}
protected void onProgressUpdate(Integer integers) {
if(integers == 1) {
Toast.makeText(classname.this, "Text", 0).show();
}
Ответ 5
Если вы хотите отобразить Toast из фонового потока, вам придется вызывать runOnUiThread из doInBackground. Я не верю туда другим способом.
Изменить: я забираю это. Я думаю, вы можете реализовать onProgressUpdate, который работает в потоке пользовательского интерфейса, чтобы показать Toast и сделать вызовы publishProgress из doInBackground.
Ответ 6
Если вы хотите отобразить Toast в doInBackground, вы можете использовать его в методе OnPostExecute AsyncTask.
protected void onPostExecute(String file_url) {
Toast.makeText(getApplicationContext(),"Your Message", Toast.LENGTH_LONG).show();
pDialog.dismiss();//dismiss the progress dialouge
}